'言っ途切れる。 alert()を使用しても機能しない理由はまったくわかりません。 Firefoxでは完全に動作しますが、Chromeではエラーが発生します。
window.alert = null;
alert('test'); // fail
delete window.alert; // true
alert('test'); // win
window
はDOMWindow
のインスタンスであり、何かをwindow.alert
に設定すると、正しい実装が「シャドウ」されます。つまり、alert
にアクセスすると、最初に検索されますwindow
オブジェクトの場合。通常、これは見つかりません。その後、プロトタイプチェーンを上って、ネイティブ実装を見つけます。ただし、alert
プロパティをwindow
に手動で追加すると、すぐに検出され、プロトタイプチェーンを上る必要はありません。 delete window.alert
を使用すると、ウィンドウ自体のプロパティを削除して、alert
のプロトタイプ実装を再び公開できます。これは説明に役立つかもしれません:
window.hasOwnProperty('alert'); // false
window.alert = null;
window.hasOwnProperty('alert'); // true
delete window.alert;
window.hasOwnProperty('alert'); // false
テストサーバーで最近同じ問題が発生しました。これが発生している可能性のある理由を検索し、ここで見つけたソリューションをテストした後、作業しているスクリプトがアラートを大量にポップアップする数時間前に、[このページのポップアップの作成を停止する]オプションをクリックしたことを思い出しました。
解決策は、タブを閉じて新しいタブを開くのと同じくらい簡単でした。
このスレッドを見てください: http://code.google.com/p/chromium/issues/detail?id=4158
この問題は、javascriptメソッド「window.open(URL、windowName [、windowFeatures])」が原因で発生します。 3番目のパラメーターwindowFeaturesが指定されている場合、Chromeのポップアップ制約されたウィンドウではアラートボックスは機能しません。これは単純化された削減です。
http://go/reductions/4158/test-home-constrained.html
3番目のパラメーターwindowFeaturesが無視される場合、アラートボックスは次のようにChromeのポップアップで機能します(ポップアップは実際にはChromeの新しいタブとして開かれます)。
http://go/reductions/4158/test-home-newtab.html
iE7、Firefox3、Safari3では発生しません。chrome特定の問題です。
簡略化された削減については、添付ファイルも参照してください
これは、jQueryを必要とせず、無効にされたiframeでアラートを有効にするスニペットです(codepenなど)。
for (var i = 0; i < document.getElementsByTagName('iframe').length; i++) {
document.getElementsByTagName('iframe')[i].setAttribute('sandbox','allow-modals');
}
この修正後も、alert()で動作するcodepenデモを次に示します。 http://codepen.io/nicholasabrams/pen/vNpoBr?editors=001
この行を本文の最後に置きます。この行がコンパイラーによって読み取られた時点では、DOMがまだ準備されていない可能性があります。
<script type="text/javascript" src="script.js"></script>"