1

这是 iFrame 附加名称的简单 setAttribute。

问题是以下代码在除 Chrome 之外的所有浏览器中都运行良好。

<iframe id="frame" frameborder="0" src="http://website.ca/"></iframe>

父 javascript:

(function() {
    var newFrameName = "hello";
    document.getElementById("frame").setAttribute("name", newFrameName);

})();

在 iFrame 中:

    var iframeName = window.name;
    alert (iframeName );

Alert 在所有浏览器中调用“Hello”,Chrome 调用“frame”——这是 iFrame 的 ID。查看源代码(通过元素检查器),在 Chrome 中,我看到了 iFrame 的正确名称:name="Hello" ...但警报调用了 id。

为什么会这样?我错过了什么?

4

2 回答 2

3

通过 createElement 创建 iframe 解决了这个问题:

 function createFrame() {
        frame= document.createElement("iframe");
        frame.setAttribute("src", "https://website.ca/");
        frame.setAttribute("name", "Hello");
        frame.setAttribute("id", "frame");
        frame.frameBorder = 0;
        frame.style.width = 100 + "%";
        frame.style.height = 2300 + "px";
        document.getElementById("iframeHolder").appendChild(frame);

    }
    createFrame();

<div id="iframeHolder"> </div>

有点破解,但它适用于这种情况。

于 2013-10-21T14:44:19.603 回答
0

6 年半后,我遇到了同样的问题。

似乎 Chrome 设置了 window.name 属性一次,并且在更新封闭 iFrame 的名称(属性或属性)时不会更新它。

但是,直接设置 window.name 确实有效。

因此,将 OP 的示例从以下位置更改:

(function() {
    var newFrameName = "hello";
    document.getElementById("frame").setAttribute("name", newFrameName);
})();

进入

(function() {
    var newFrameName = "hello";
    document.getElementById("frame").name = newFrameName; // keep for other browsers
    document.getElementById("frame").contentWindow.name = newFrameName;
})();

作品...

于 2020-01-07T10:19:50.797 回答