内のすべてのネストされたフレームの難しなっリストは、こんにちは、私は私ののGreaseMonkeyスクリプトのすべてのフレームのリストを取得する必要がありますが、実際に私はそれが一般的なJavascriptの質問あると思います。私がページに入れ子になっているすべての単一のフレームに到達することができれば素晴らしいことでしょう。これまでのところ、メインドキュメントフレームにネストされたフレームの数を取得することに問題がありました。私が扱ってるJavaスクリプト、ページ
ページマルチレベルで、フレームは他のフレームが含まれていフレームセットで構成されています。私はメイン文書フレームセット(コードレベル1)のトップレベルフレームについての情報を得ることができましたが、このレベルでは、これらのフレームのフレームカウントが0に等しいという情報が得られます。
私は、次のコード
$(document).ready(function(){
var frames = window.frames;
var i,j;
var reportText = "level 0 > " + frames.length +"\r\n";
for (i = 0; i < frames.length; i++) {
var frames2 = frames[i].frames;
reportText += "level 1 - " + i + " > " + frames[i].name + " - " + frames2.length +"\r\n";
for (j = 0; j < frames2.length; j++) {
var frames3 = frames2[j].frames;
reportText += "level 2 - " + i + " - " + j + " > " + frames2[j].name + " - " + frames3.length +"\r\n";
}
}
alert(reportText);});
事実メイン文書のフレーム数とレベル1名またはメイン文書のフレームにされそうレベル0を思い付いている - これらの事が正しくなく、報告されています各フレームの量はレベル1フレームです。私のコードに間違いがあるか、サブフレームが完全にロードされていないことが原因であるかどうかを知りたいのです。唯一のフレームセット
(function(){
document.addEventListener('keydown', function(e) {
if (e.keyCode == 72 && !e.shiftKey && !e.ctrlKey && e.altKey && !e.metaKey) {
//...my previous code inside document.ready...
}
}, false);})();
の構成され、私は結局その完全にロードされたように見えるが、ここでは別の問題だろう、キーボードショートカットから私のコードを呼び出すようにしようとしました
、次のコードのように思えるが、ページと連携していないようです
コードは自動的にすべてのフレームとサブフレームを介してくしゃみを行いますが、現在のシェイプ(各レベルには独自のループがある場合)も最適です。
ショートカットキーを使用できないという問題は副次的です。 主なものは、メイン文書の枠内とそれを超えて、フレームの適切な数を取得しています。
EDIT:サンプル出力と私のテストページのネストされたフレームセットと
出力
レベル> 3 0
レベル1から0> MAIN1 - 0
レベル1 - > main2 - 0
レベル1 - 2> main3 - 0
テストページのネストされたフレームセット
frame0.htm
<!DOCTYPE html>
<html>
<frameset cols="25%,*,25%">
<frame id="frmain1" name="main1" src="frame0_1.htm">
<frame id="frmain2" name="main2" src="frame0_2.htm">
<frame id="frmain3" name="main3" src="frame0_3.htm">
</frameset>
</html>
frame0_1有します。HTM
<!DOCTYPE html>
<html>
<frameset rows="25%,*">
<frame id="frsub11" name="sub11" src="frame0_1_1.htm">
<frame id="frsub12" name="sub12" src="frame0_1_2.htm">
</frameset>
</html>
frame0_1_1.htm
<!DOCTYPE html>
<html>
<body style="background: darkorange;">
</body>
</html>
frame0_1_2.htm
<!DOCTYPE html>
<html>
<body style="background: lightyellow;">
</body>
</html>
frame0_2.htm
<!DOCTYPE html>
<html>
<frameset rows="25%,*,25%">
<frame id="frsub21" name="sub21" src="frame0_2_1.htm">
<frame id="frsub22" name="sub22" src="frame0_2_2.htm">
<frame id="frsub23" name="sub23" src="frame0_2_3.htm">
</frameset>
</html>
frame0_2_1.htm
<!DOCTYPE html>
<html>
<body style="background: skyblue;">
</body>
</html>
frame0_2_2.htm
<!DOCTYPE html>
<html>
<body style="background: cornflowerblue;">
</body>
</html>
frame0_2_3.htm
<!DOCTYPE html>
<html>
<body style="background: slateblue;">
</body>
</html>
frame0_3.htm
<!DOCTYPE html>
<html>
<frameset rows="25%,*">
<frame id="frsub31" name="sub31" src="frame0_3_1.htm">
<frame id="frsub32" name="sub32" src="frame0_3_2.htm">
</frameset>
</html>
frame0_3_1.htm
<!DOCTYPE html>
<html>
<body style="background: darkgreen;">
</body>
</html>
frame0_3_2.htm
<!DOCTYPE html>
<html>
<body style="background: lightgreen;">
<a id="test" href="http://www.google.com">testlink</a>
</body>
</html>
フレームが異なるドメインに属する場合、そのコンテンツ(したがってサブフレーム)にアクセスすることはできません。また、あなたのコードに明白なエラーがあります: 'frames2 [j] .frames.lenght'。 – jcaron
@jcaron間違いを指摘していただきありがとうございます。このコード部分は、0フレームカウント前の1ステップが報告されたときに実行する機会がありませんでした。私は同じ起源政策を認識しており、これはここでは当てはまりません。それでも、私は主なドキュメントフレームセットのフレーム内にフレームの数を得ることができないという手掛かりはありません。 – MoreThanChaos
あなたのコードはまったく実行されていますか?ログを(ブラウザコンソールで見ることができる 'console.log'を使って)別の場所で追加して、実行されている部分を確認し、関連するデータを記録します。それは '警戒'よりずっと便利だろう。 – jcaron