人々の反応に感謝したい。OP にはコードを含めませんでした。これは大規模なスクリプトであり、実行しようとしていたことの「例」を解析することで、関連性が取り除かれる可能性が高いためです。
私は投稿していますが、問題を発見したと言っています。
PageA には、PageB が読み込まれる IFrame が含まれています。
<html>
<head><title>PageA</title></head>
<body>
<IFrame src="PageB" name="frame1" id="frame1"></IFrame>
</body>
</html>
PageB には、ボタンがクリックされたときに PageA から呼び出す必要がある関数が含まれています。
<!-- PageB -->
<html>
<head><title>PageB</title></head>
<body>
<form id="form1" name="form1" >
</form>
<script>
var SubmitForm = function(){
var $form = $("form[id$='form1']");
$form[0].submit(); // this was not firing
console.log("some log output"); // this was throwing an error
};
</script>
</body>
</html>
<!-- PageA -->
<html>
<head><title>PageA</title></head>
<body>
<IFrame src="PageB" name="frame1" id="frame1"></IFrame>
<button onclick="submitIFrameForm()">Submit</button>
<script>
var frameWindow = frames["frame1"];
var frameForm = frameWindow.SubmitForm;
function submitIFrameForm(){
frameForm();
};
</script>
</body>
</html>
問題
PageA が最初にロードされると、IFrame が PageB とともにロードされ、PageA のスクリプトが PageB の「SubmItForm()」関数への参照 (frameForm) を作成します。PageA で [フォームの送信] ボタンをクリックすると、PageB がサーバーに送信されます。問題ない ...
ただし、PageB が送信されると、ウィンドウからアンロードされます。そのため、PageA の送信ボタンをもう一度クリックすると、PageB がリロードされる可能性がありますが、それはページの別のインスタンスです。したがって、元の PageB を参照するすべての変数が何も指していないため、コンソールが参照していたウィンドウが存在しなくなったため、「ログ」メソッドを実行できません。
修正
IFrame のコンテンツへのグローバル参照を作成する代わりに、ボタンがクリックされるたびに関数へのこの参照を再確立する必要があります。(IFrame は PageA のメンバーであるため、IFrame 参照を再確立する必要はありません)。
<!-- PageA -->
<html>
<head><title>PageA</title></head>
<body>
<IFrame src="PageB" name="frame1" id="frame1"></IFrame>
<button onclick="submitIFrameForm()">Submit</button>
<script>
var frameWindow = frames["frame1"];
function submitIFrameForm(){
frameWindow.SubmitForm(); // move the reference to the click event handler
};
</script>
</body>
</html>
これが理にかなっていて、誰かに役立つことを願っています. 私はこの種のものに常に巻き込まれています。