搜狗瀏覽器和$.jBox的坑
阿新 • • 發佈:2019-01-11
公司專案使用$.jBox,因為使用了$.jBox.open方法,搜狗瀏覽器下會出現跨域問題,wtf?
jquery-1.8.3.min.js:2 Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "http://localhost:8780" from accessing a cross-origin frame.
at contents
原因是Sogou會自動加上一個iframe在頁面上,剛好$.jBox又有一段程式碼遍歷所有的iframe,然後就出現跨域問題,臨時解決辦法
// 解決框架內object和applet被遮住問題 var fade = function(iframe, callback){ iframe.each(function(){
//加上這個暫時過濾搜狗的iframe if($(a(this)[0]).hasClass('sogou_sugg_feedbackquan')){ return false; } var ifr = a(this).contents(); if (ifr.find('object, applet').length > 0){ var mf = a('#mainFrame') var mt = mf.offset()?mf.offset().top:0; var ml = mf.offset()?mf.offset().left:0; var tt = a(this).offset().top; var tl = a(this).offset().left; var top = mt == tt ? mt : mt + tt; var left = ml == tl ? ml : ml + tl; callback(a(this), ifr, top, left); } if (ifr.find("iframe").length > 0){ fade(ifr.find("iframe"), callback); } }); };