在javascript中嵌套在Frame内的iframe中获取元素值?

时间:2014-06-06 05:20:32

标签: javascript iframe frame getelementbyid

我主要的php页面有2帧。在第二帧内有iframe。 我想从第1帧访问iframe文档中的元素值。

我试过这样:

var frame1 = parent.frames[1];
var frame2 = frame1.document.getElementsByTagName('iframe')[0];
var eleValue =frame2.contentWindow.document.getElementById("MyElement").value;

但是我没有收到任何价值,但它存在。

var frame1 = parent.frames[1];
alert(frame1.name);
var frame2 = frame1.document.getElementsByTagName('iframe')[0];
alert(frame2.name);
var txtClinic = frame1.document.getElementsByTagName('iframe')[0].contentDocument.getElementById("clinicFlag");

最后一行代码不会返回任何控件对象。

1 个答案:

答案 0 :(得分:4)

以下是我在评论中链接的修改后的回答片段。如果找不到window,则函数返回{i}帧的id对象,其中id传递(null)或(i)frame。如果所有(i)frame都在同一个域中,则此方法有效。此外,id元素的(i)frame在窗口结构中涉及的所有文档中必须是唯一的。

function searchFrame(id) {                                     // id = the id of the wanted (i)frame
    var result = null,                                         // Stores the result
        search = function (iframes) {                          // Recursively called function
            var n;                                             // General loop counter
            for (n = 0; n < iframes.length; n++) {             // Iterate through all passed windows in (i)frames
                if (iframes[n].frameElement.id = id) {         // Check the id of the (i)frame
                    result = iframes[n];                       // If found the wanted id, store the window to result
                }
                if (!result && iframes[n].frames.length > 0) { // Check if result not found and current window has (i)frames
                    search(iframes[n].frames);                 // Call search again, pass the windows in current window
                }
            }
        };
    search(window.top.frames);                                  // Start searching from the topmost window
    return result;                                              // Returns the wanted window if found, null otherwise
}

此功能可以找到传递frame的{​​{1}}或iframe,无论它放在窗口结构中的哪个位置。此功能也可以在任何窗口中放置和调用。我把它放到主页面(作为全局)。如果在子窗口中需要该方法,只需使用id进行调用。

除了top.searchFrame(...)之外,还可以使用id,只要它们也是唯一的。在这种情况下,name签入id需要修改为searchFrame()检查。

在您的情况下,首先您需要向目标name提供id,然后您可以使用代码,例如:

iframe

上面的方法可能有点过分以获得单个引用,但是如果你必须在不同的窗口中多次获得这些跨窗口引用,那么它非常有用。

你的具体任务可以这样完成:

var txtClinic = searchFrame('IFRAME_ID').document.getElementById('clinicFlag');

var txtClinic = parent.frames[1].frames[0].document.getElementById('clinicFlag'); 的{​​p> name也可以与(i)frame集合一起使用。而不是索引,您可以使用名称。只需始终从主页开始链接引用,即从frames开始。例如:

top

有用的阅读:

window.top
window.frameElement
window.frames