ユーザースクリプトの場合、スタイル、コンテンツ、イベント、タイマーをすべて含むページをクリアする必要があります。にリダイレクトせずにそれを行うことは可能about:blank
ですか?
試してみdocument.body.remove(); document.head.remove();
ましたが、タイマーは無効になりませんでした。
HTML ページを適切にクリアするにはどうすればよいですか?
ユーザースクリプトの場合、スタイル、コンテンツ、イベント、タイマーをすべて含むページをクリアする必要があります。にリダイレクトせずにそれを行うことは可能about:blank
ですか?
試してみdocument.body.remove(); document.head.remove();
ましたが、タイマーは無効になりませんでした。
HTML ページを適切にクリアするにはどうすればよいですか?
タイマーを削除するには、空の setTimeout をリクエストしてから、その ID を減らして、ID ごとに clearTimeout を呼び出します。setInterval についても同じことができます。
*編集: bikeshedder が言ったように、timeoutID のタイプは MDN で定義されていません。乱数から UUID まで何でもかまいません。MSDN はこれを整数として定義していますが、ID を時間の経過とともに大きくする必要があるとは述べていません。停止したタイムアウト/インターバルの ID が再利用される可能性は十分にあります。これに依存することは移植性がなく、将来壊れる可能性があります。
しかし同時に、上記の方法はすべてのタイマーをクリアするための唯一の可能な方法です。少なくとも、それはまだ動作します。
個人的には、できればすべての setTimeout と setInterval の ID を保持することをお勧めします。
確実にするには、ブラウザを別の URL にリダイレクトするだけです。
window.location = "empty.html";
about:blank
すべてのブラウザーで使用できるとは限らず、Same-Origin-Policy のために iframe またはウィンドウのコンテンツを制御できなくなる可能性があるため、使用したくありません。またabout:blank
、すべてのブラウザで利用できるわけではありません。
ブラウザーを別のページにリダイレクトせずに信頼できる唯一の方法は、明示的な追跡を使用することです。コードは、タイマーの開始/停止、イベントの登録などに特別な関数を使用する必要があります。これは面倒であり、使用しているすべてのライブラリをハックする必要があるため、あまり実用的ではないと思います。
の組み込み関数にモンキーパッチを適用することwindow
も、一部のブラウザでは許可されていない可能性があるため、絶対にやめてください。
にリダイレクトでき"data:text/html,"
ます。これにより、URL 内でレンダリングされる HTML ドキュメントを指定できます。
IE9 は、iframe とウィンドウのデータ URL をサポートする Internet Explorer の最初のバージョンです。
参考:ウィキペディアのデータ URI スキーム#Web ブラウザのサポート。