首先说一下背景:
现在正在做与其他平台的对接开发工作,现一级域名相同,二级域名不同,原产品可以正常的进行通讯访问,现对方平台内容链接放入到本系统中,出现了跨域问题,所以在基础页面上加入域限定,
<script type="text/javascript">
try {
document.domain="iuoooo.com";
} catch(e){
}
</script>
对方系统可以正常的展示,自己的系统在谷歌以及360的浏览器上也能正常访问,但是在IE11出现了跨域问题,console窗口也会有Script5:拒绝访问的提示。
出现问题的原因在于:使用插件artDialog.js,弹出页面,弹出的页面中有一个中转使用的一个jsp,问题就出现在这,在artDialog.js中进行初始化操作:
说明:下面的处理在没有进行上面的域限定的情况不存在这个问题。
tmpl会动态的加载src,在IE11中,页面还没有加载出来,在下面的initFn中就要初始化使用,执行到iwin,attacheEvent方法的时候抛出,Script5:拒绝访问,所以进行了特殊处理:
$.fn.dialog.open = function(url, options,isTop){
var load, $iframe, iwin,
opt = options,
id = _name + 'Open',
isWindowTop = isTop?isTop:'top',
jumpFlag = url.indexOf("/common/djframe.htm")>-1;
var temlUrl = jumpFlag?url:CTX+"/tempJump.jsp";
// 判断是否是IE浏览器
var isIE = false;
if (!!window.ActiveXObject || "ActiveXObject" in window){
isIE = true;
}else{
isIE = false;
}
//IE 浏览器进行特殊的处理
var tmp = !isIE ?'<iframe class="' + id + '" src="<%=url%>" frameborder="0" allowtransparency="true"></iframe>':'<iframe class="' + id + '" id="'+id+'" frameborder="0" allowtransparency="true"></iframe>';
data = {
//window: 'top',
window: isWindowTop,
content: {url: temlUrl},
tmpl: tmp,
initFn: function(here){
var api = this;
$iframe = $('iframe', api.ui.content[0]);
// IE浏览器特殊处理,这样做,主要是因为下面要调用这个内容,动态的填充渲染
if(isIE){
var con = '<form name="form1" id="form1" action="" method="post"><div id="param"></div></form>';
$iframe[0].contentDocument.documentElement.innerHTML = con;
}
iwin = $iframe[0].contentWindow;
if(!jumpFlag){
var size = url.indexOf("?");
var realUrl = "";
var param = "";
if(size!=-1){
realUrl = url.substring(0,size);
param = url.substring(size+1);
}else{
realUrl = url;
}
var iwin1 = $iframe[0];
iwin1.setAttribute("data-xUrl",realUrl )
```