IE中的脚本对象(作为iframe替换)会产生奇怪的东西

时间:2009-09-07 18:04:36

标签: javascript html xhtml

我在我的网站上使用严格的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。

关于这种奇怪行为的任何提示?

2 个答案:

答案 0 :(得分:0)

在早期版本的IE中(不了解IE8)某些元素类型的某些属性在设置一次(编程或其他方式)后是不可变的。我相信object和所有表单元素(inputtextarea等)都是这样的。

我确信有一个更优雅的方法来解决这个问题,但你可以尝试这样的事情(未经测试):

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。