我在我的网站上使用严格的xhtml,所以我没有“iframe”元素。相反,我正在尝试使用object标签。
我想动态打开内容,所以我有一个像这样的javascript函数:
<object id="oPageName">
<script>
function openPage(pageName) {
var ifContent = document.getElementById("oPageName");
ifContent.data = pageName;
}
</script>
如果我将“someFolder / somepage.aspx”传递给openPage函数,它只是将内容页面设置为“http://mysite/” - 就像它正在切断URL的剩余部分一样。
它适用于FF和Chrome,但不适用于IE 8。
关于这种奇怪行为的任何提示?
答案 0 :(得分:0)
在早期版本的IE中(不了解IE8)某些元素类型的某些属性在设置一次(编程或其他方式)后是不可变的。我相信object
和所有表单元素(input
,textarea
等)都是这样的。
我确信有一个更优雅的方法来解决这个问题,但你可以尝试这样的事情(未经测试):
function openPage(pageName) {
var ifContent = document.getElementById("oPageName");
try {
ifContent.setAttribute('data', pageName);
catch (e) { // catch immutable attribute error
// create a new object and replace the old one
var o = document.createElement('object');
o.setAttribute('name', pageName);
ifContent.parentNode.replaceChild(o, ifContent);
}
}
大多数JS framworks都有自己的setAttribute()
版本,可以解决IE的属性处理错误。
答案 1 :(得分:0)
如果我将“someFolder / somepage.aspx”传入openPage函数,它只是将内容页面设置为“http://mysite/”
然后,你做得比大多数好。在IE8中更改object.data对我来说什么都不做,就像它在IE中一样。
IE中的&lt; object&gt;上有一个非标准的'object'属性,它为您提供了内部HTML页面的文档对象(正如您期望从不受支持的contentDocument属性获得的那样)。但是,导航该页面(通过object.object.URL或object.object.parentWindow.location)与写入object.data相同:没有。 (IE似乎感到困惑;如果你看一下object.object.location.href,它实际上指的是父URL,即使它是子文档。)
基本上,它被打到地狱,你最好忘记&lt; object&gt;今天用于HTML嵌入。如果要验证,请使用Transitional DTD吞下您的骄傲并包含iframe。