1

下面的代码显示了问题。它创建了一个简单的 iframe。

在 IE 以外的浏览器上,如果 url 设置为 http:[4 slashes] test.com 而不是 http:[two slashes] test.com,iframe 将显示错误。在 IE 上,父页面重定向到错误页面。

我在其他人网站的小部件中使用 iframe,如果出现错误,这可能会造成很大的损失。我的问题是如何避免它,所以如果 SRC url 错误,错误将保留在 iframe 中并且不会导致整个页面重定向。

要检查,您可以将代码复制到 jsfiddle.net 并运行。

popup = window.document.createElement('div');
popup_html="<div style='width:300px;height:300px; ' >";
popup_html+=" <iframe src='http:////www.test.com' width='300' height='300' frameborder='0' ></iframe>";
popup_html+=" </div>";
popup.innerHTML=popup_html;
//cbar_popup.style.visibility='visible';
window.document.body.appendChild(popup);
4

2 回答 2

1

您可以尝试这样的方法来清理 url,并且仅在 url 有效时才尝试弹出内容:

var url = 'http:////stackoverflow.com/questions/16076720/ie-entire-page-redirects-if-iframe-src-is-set-with-bad-url';
var result = /^(?:(?:http[s]?:\/{2,4})?(?:www\.)?)?([\w-_]+)\.([\w\.]+)([\/\?\w-_\=\"]*)/.exec(url);

if(result){
    url = 'http://'+result[1]+'.'+result[2]+result[3];
    console.log(url);
    // do the popup stuff here with cleaned up url
}
于 2013-04-18T08:59:02.220 回答
0

为了防止重定向,你可以试试这个。

popup = window.document.createElement('div');
popup_html="<div style='width:300px;height:300px; ' >";
popup_html+=" <iframe id='myframe' src='' width='300' height='300' frameborder='0' ></iframe>";
popup_html+=" </div>";
popup.innerHTML=popup_html;
//cbar_popup.style.visibility='visible';
window.document.body.appendChild(popup);
document.getElementById('myframe').src="http:////www.test.com";

我不知道它发生的真正原因。我正在分析ieframe.dll调用的js。如果我发现任何与此有关的信息,我将更新我的答案。

于 2013-04-18T09:36:02.170 回答