为什么我的代码不适用于所有浏览器?

时间:2011-05-26 07:45:08

标签: javascript firefox safari

  

可能重复:
  JavaScript works on Safari 3 but not on newer versions

以下JavaScript适用于IE,但不适用于Safari / Firefox:

function loadframe() {
    var iframeEl = document.getElementById("ifrm");
    if (!iframeEl) {

        var el = document.createElement('<iframe id="ifrm" width="80" height="80" src=\'<!--EP CLASS="com.epiphany.presentation.ServerURLWriter" ACTION="campaign_segment_load" TEMPLATE="campaign\\campaign_segments" -->\' onload="dw_display(\'ifrm\',\'segmentspn\')" ></iframe>');

        document.body.appendChild(el);
        return true;
    }
    return false;
}

有人能发现问题吗?

3 个答案:

答案 0 :(得分:4)

这只是因为你错了。

document.createElement期望标签名称不是html代码:

iframe = document.createElement("iframe");

https://developer.mozilla.org/en/DOM/document.createElement

http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-2141741547

Dom 2核心规范:

  

的createElement

tagName of type DOMString
 The name of the element type to instantiate.

答案 1 :(得分:2)

将HTML字符串传递给document.createElement()的功能是Internet Explorer专有功能。其他浏览器不允许您这样做。

一种可能的解决方案是创建一个包装元素,并将其innerHTML设置为您所在的HTML字符串。

function loadframe() {
    var iframeEl = document.getElementById("ifrm");
    if (!iframeEl) {
        var el = document.createElement('div');
        el.innerHTML = '<iframe id="ifrm" width="80" height="80" src=\'<!--EP CLASS="com.epiphany.presentation.ServerURLWriter" ACTION="campaign_segment_load" TEMPLATE="campaign\\campaign_segments" -->\' onload="dw_display(\'ifrm\',\'segmentspn\')" ></iframe>';

        document.body.appendChild(el);
        return true;
    }
    return false;
}

请注意,您的HTML也无效 - 您无法在属性中添加HTML注释。

答案 2 :(得分:0)

代码无效。 document.createElement的参数只能是标记名,如“iframe”。然后,您必须稍后设置属性。

document.createElement('iframe');

它不适用于符合标准的浏览器,并且无法在Internet Explorer 9中使用。请参阅此链接:

http://msdn.microsoft.com/en-us/library/ff986077%28v=vs.85%29.aspx