进去iframe元素值嵌套在框架在JavaScript?进去iframe元素值嵌套在框架在JavaS

2019-05-12 09:47发布

我主要的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");

代码最后一行亘古不返回任何控制对象。

Answer 1:

这里是我的答案在评论链接的修改的摘录。 函数返回window与第(i)帧的对象id传递( id ),或null ,如果(i)frame中没有找到。 这种方法仅适用,如果所有的(i)frame s为在相同的域中。 也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
}

该功能可以找到一个frameiframe与传递的id而不管在其被放置在窗口结构。 同样的功能可以放置,并要求在任何窗口。 我把这个主页面(全球)。 如果需要在子窗口的方法,只是调用top.searchFrame(...)

取而代之的id S,也name s时,可以使用,只要他们也很独特。 在这种情况下, id在检查searchFrame()需要被编辑以name检查。

在你的情况下,首先你需要给一个id为目标iframe ,那么你可以使用代码,例如这样的:

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

上面的方法可能会有点overkilling得到一个参考,但它是非常有帮助的,如果你有多次得到不同的窗口内这些跨窗口引用。

你的特定任务可以做这样的:

var txtClinic = parent.frames[1].frames[0].document.getElementById('clinicFlag');

name的第(i)frame也很方便与使用frames集合。 相反,指数就可以使用名称。 只是一直连锁从主页面,即从开始参考top 。 例如:

var iframeWin = top.frames['frame2'].frames['iframe1'];

有用的阅读:

window.top
window.frameElement
window.frames



文章来源: Get element value inside iframe which is nested inside Frame in javascript?