我主要的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");
最后一行代码不会返回任何控件对象。
答案 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
有用的阅读: