メソッドを呼び出すことで、各ページに必要な値を見つける作業をさせることをお勧めします。基本的に参照インターフェイスを公開します。次に、親ページからターゲットページのメソッドを呼び出すだけです。適切なネーミングは、開発者が何が起こっているのかを理解するのに役立ち、メソッドを使用するとロジックが単純化されます。
親ページから値を取得する必要がある場合は、共通インターフェイスを使用して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