多くの Web 開発者は、このような問題に遭遇したことがあるかもしれません。プログラムでは、エラー行 1、列 1 に「リリースされたスクリプトのコードを実行できません」というメッセージが表示されます。この種のメッセージの説明は不明瞭で、行と列の説明も均一です。 JS エラーは、JS プログラムをデバッグする友人にとって最も憂鬱で嫌なことだと考えられています。この種の問題が発生した場合、最も簡単な方法は、Baidu または Google の小さな入力ボックスにエラーを直接貼り付け、解決する前にヒントを提供してもらうことですが、今回はそれほど簡単ではないようです。 Baidu で検索しているときにこの問題に遭遇しました。以前にもこの種の問題を見たことがありますが、いつも QQ スペース エラーのようなものです。私は頭がおかしいか、質問だけがあって答えがなく、退屈です。
このエラーはどこから来たのでしょうか?推測して試すしかありませんでした...長い間検索した後、最終的にエラーの場所を見つけました。その後、書き込みに問題がないことがわかりました。プログラムの説明プロセスを頭で考えますが、まだわかりません。百度の続きですが、とあるWebページでふと「ページを閉じるとページのjsが自動的に解放される」という一文を目にしました。この短い一文は私に多くのインスピレーションを与えてくれました。プログラムがページを閉じたかリダイレクトしたかを確認したところ、リダイレクトが実行されたことがわかり、このページに戻るときにエラーが発生しました。突然、理解できました。
シナリオ: ページには iframe a と b の 2 つのフレーム ページがあり、ページ b では、関数参照 (関数ポインター) が js を介してページ a に渡され、ページ a の変数に保存されます。この参照を使用して、ページ b を操作したり、ページ b でいくつかのプログラムを実行したりします。このとき、ページ b が更新またはリダイレクトされると、ページ a の変数はページ b の関数のポインタ (メモリ アドレス) を保存します。 b ページが再構築されるため、ページ b の関数ポインタは変更されますが、a にはページ b が更新される前に渡されたポインタ (メモリ アドレス) が保持されています。このとき、ページ a の変数には、指定されたポインタ アドレスからアクセスできません。ページ b の対応する関数 (関数ポインタのアドレスが変更され、元のメモリ ポインタが解放されたため) の場合、実行中に「解放されたスクリプト コードを実行できません」というエラーが発生します。
解決策: ページ a にフォールト トレランス処理を追加します。参照エラーが発生した場合、保存されている参照 (関数ポインター) をクリアするか、デフォルト関数を指します。また、ページbを再度ロードする場合には、再度関数参照をページaに転送する必要があるため、このようなエラーは発生しません。
ここでの説明は少し抽象的すぎるかもしれません。最初にテストし、次に URL を返し、再度テストすると、この問題が発生します。