小虾虎鱼

小虾虎鱼

signalR在IOS中影响iframe的加载

作者 禾惠 发表于 2014/04/29,最后修改于 2014/04/29

        项目中使用到了signalR来实时推送,已经使用一段时间了,昨天测试在ipad中测试时发现网站的所有iframe都不能正常的加载,由于没有Mac电脑不能很好的调试,只能不断的猜测与尝试。

一点一点的排除问题的原因...

        尝试过将iframe的地址在新窗口单独打开,有时候能正常的显示,有时候不能完全显示,找不到为什么,很郁闷。在测试的时候无意将网站的主页面关掉,单独打开iframe的地址,发现页面一直能正常的显示,难道与主页面有关?

        经过不断的排除主页面的代码,最后将目标锁定到了使用signalR那段代码,将这段代码屏蔽后,再尝试打开iframe,iframe可以正常的显示了,真的是signalR(使用的是2.0.2版本)的问题。

        一直到现在还不知道真正的原因所在,猜测会不会与signalR建立的长连接有关?

        遇到问题得要想个解决办法,不能把推送功能给阉了。尽然是signalR的影响,那么我可以在打开iframe之间将signalR的推送断开connection.stop(),待iframe加载完后我再启用signalR connection.start(),完整代码:

var connection = $.hubConnection();
var chat = connection.createHubProxy('chatHub');
chat.on("updateChat", function() {
  
});
window.SR = {
    isIOS: /iPad|iPhone/.test(navigator.userAgent),
    /// turn on signalR
    turnOnSR: function(on) {
        (on || this.isIOS) && connection.start();
    },
    /// turn off signalR
    turnOffSR: function() {
        this.isIOS && connection.stop();
    }
};
/// 针对所有浏览器启用signalR
SR.turnOnSR(true);

断开signalR:

SR.turnOffSR();

启用signalR:

SR.turnOnSR();

到此问题算是解决了。