`base` 标记使 iframe 在 Internet Explorer 中作为新窗口打开
Posted
技术标签:
【中文标题】`base` 标记使 iframe 在 Internet Explorer 中作为新窗口打开【英文标题】:`base` tag causes iframe to open as new window in Internet Explorer 【发布时间】:2013-12-17 14:05:56 【问题描述】:base
tag 有问题,它只影响 Internet Explorer(版本 8、9 和 10)。
以下代码用于在 iframe 中打开动态内容,并在 Chrome 和 Firefox 中正常运行。它在 Internet Explorer 中也能正常工作,但只是没有<base target="_blank"/>
标记。包含此标记会导致 iframe 作为新窗口打开(这是有道理的,但这不是我想要做的。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<base target="_blank"/>
</head>
<body>
<div id="main"></div>
<script type="text/javascript">
function load_iframe(name, height, width)
var div = document.getElementById(name);
var ifrm = document.createElement('iframe');
ifrm.id = 'iframe_' + name;
ifrm.frameBorder = 0;
ifrm.scrolling = 'no';
ifrm.noresize = 'noresize';
ifrm.marginheight = 0;
ifrm.marginwidth = 0;
if (height !== 0)
ifrm.height = height;
if (width !== 0)
ifrm.width = width;
div.appendChild(ifrm);
content = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head></head><body></body></html>';
if (/msie/.test(navigator.userAgent.toLowerCase()) || window.opera)
ifrm.contentWindow.contents = content;
return ifrm.src = 'javascript:window["contents"]';
else
doc = ifrm.contentDocument;
doc.open();
doc.write(content);
doc.close();
return ifrm;
load_iframe('main', 250, 300);
</script>
</body>
</html>
我该如何解决这个问题?不幸的是,我无法让代码在小提琴中运行,可能是因为它依赖于 <base/>
在 <head>
中。
【问题讨论】:
您是否尝试过为 iframe 赋予值为“_self”的“target”属性? 是的,我试过了。我不认为target
是 iframe 的有效属性
div = document.getElementById(div);
和 ifrm.id = 'iframe_' + div;
没有意义,div
这里是 HTMLElement,而不是字符串。同样iframe
s 没有noresize
属性,它是用于frame
s。
哎呀,我已经修复了 div
变量,这是错误的。
@JoshuaSpence 如果删除基本标签,iframe 在 Chrome 和 IE10/9/8 中可以正常工作。 "target=_blank" 的目的是在新窗口/标签中打开链接,所以如果你不希望这个不要包含它。
【参考方案1】:
我刚刚删除了 /msie/.test(navigator.userAgent.toLowerCase()) ||
部分,在 IE8 上运行良好。您确定需要这段代码吗?
但是,无论您是否不想删除这块,您都可以删除base
标签并在创建iframe
之后添加它:
load_iframe('main', 250, 300);
//and then:
var hd = document.getElementsByTagName("head")[0];
var bs = document.createElement("base");
bs.target= "_blank";
hd.appendChild(bs);
我在 chrome、IE8、IE11 上测试过,效果很好!
【讨论】:
【参考方案2】:正如 cmets target="_blank" 中所说,使浏览器打开一个新窗口或选项卡(取决于您的配置)。
只需将其删除或自行替换(在 IE8 上测试):
<base target="_self"/>
【讨论】:
以上是关于`base` 标记使 iframe 在 Internet Explorer 中作为新窗口打开的主要内容,如果未能解决你的问题,请参考以下文章