我建議你讓每個頁面通過調用一個方法來找到你想要的值。基本上暴露一個查找界面。然後,您只需要從父頁面調用目標頁面上的方法。正確的命名將幫助開發人員理解正在發生的事情,使用方法將簡化邏輯。
或者,如果您只需要從父頁面獲取值,則可以使用通用界面在iframe中的每個頁面上註冊一個鉤子。每個頁面都可以調用該鉤子來獲取值。這會阻止您確定頁面的級別的複雜邏輯。像
iframe1.GetValueHook = this.GetValue;
iframe2.GetValueHook = this.GetValue;
東西然後,每個頁面可以叫
var x = this.GetValueHook();
如果您有嵌套頁面,你可以把這個遞歸。如果您需要所有頁面之間的通信,則使用相同的方法,但需要註冊過程。每個頁面註冊自己(和它的孩子)與它的父母。但是如果你需要這樣做,那麼你應該重新評估你的架構。
實施例: register.js
var __FRAMENAME = "Frame1";
var __FIELDID = "fieldId";
var __frames = [];
function RegisterFrame(frame) {
__frames.push(frame);
for (var i = 0; i < frame.children.length; i++) {
__frames.push(frame.children[i]);
}
RegisterWithParent();
}
function RegisterWithParent() {
var reg = {
name: __FRAMENAME,
getvalue: GetFieldValue,
children: __frames
};
if(parent != undefined && parent != this) {
parent.RegisterFrame(reg);
}
}
function SetupFrame(name, fieldId) {
__FRAMENAME = name;
__FIELDID = fieldId;
RegisterWithParent();
}
function GetFieldValue() {
return document.getElementById(__FIELDID).value;
}
function GetValueFrom(name) {
for (var i = 0; i < __frames.length; i++) {
if (__frames[i].name == name) {
return __frames[i].getvalue();
}
}
}
的index.html
<html>
<head>
<script language="javascript" type="text/javascript" src="register.js"></script>
</head>
<body>
PAGE
<input type="hidden" id="hid123" value="123" />
<iframe id="frame1" src="frame1.html"></iframe>
<iframe id="frame2" src="frame2.html"></iframe>
<script type="text/javascript">
SetupFrame("Index", "hid123");
setTimeout(function() { //Only here for demonstration. Make sure the pages are registred
alert(GetValueFrom("frame3"));
}, 2000);
</script>
</body></html>
幀1。HTML
<html>
<head>
<script language="javascript" type="text/javascript" src="register.js"></script>
</head>
<body>
<input type="hidden" id="hid" value="eterert" />
<script type="text/javascript">
SetupFrame("frame1", "hid");
</script>
</body></html>
frame2.html
<html>
<head>
<script language="javascript" type="text/javascript" src="register.js"></script>
</head>
<body>
<input type="hidden" id="hid456" value="sdfsdf" />
<iframe id="frame2" src="frame3.html"></iframe>
<script type="text/javascript">
SetupFrame("frame2", "hid456");
</script>
</body></html>
frame3.html
<html>
<head>
<script language="javascript" type="text/javascript" src="register.js"></script>
</head>
<body>
<input type="hidden" id="hid999" value="bnmbnmbnm" />
<script type="text/javascript">
SetupFrame("frame3", "hid999");
</script>
</body></html>
這將是更好,如果你可以改變它使用字典/哈希tbale而不是循環。
這就是爲什麼發明評論。記錄你在做什麼。 – Gerben