ポーリングせずに(またはスクリプトの孤立した世界から抜け出して、Webページのjavascriptコンテキストで呼び出しを傍受する)ことなく、chromeユーザースクリプト(拡張子ではないhistory.pushState
)からURLの変更を検出できますか?
私の問題、より詳細には:
Githubは、サイト内のページ間のサイト ナビゲーションにpjax [最小化された例history.pushState
] を介して[ WHAT-WG 仕様] を使用するため、サイトを閲覧するときにページ全体をリロードする代わりに、サイト上の特定の URL を対象とするユーザー スクリプトその URL でサイトに入るか、ページを手動で強制的にリロードした場合にのみ起動します。
私は、DRY 用の小さなユーザー スクリプト ライブラリon.jsを作成しています。ユーザー スクリプトを作成し、呼び出しをインターセプトしてpushState
、ホスト スクリプトが実行したい新しいページにいるときを確認し、それを呼び出すだけで、ユーザー スクリプトを処理します。関連する場合。
history.pushState
呼び出されたときにイベントが発生した場合、これは比較的簡単ですがpopstate
、最初のページが読み込まれるか、ユーザーが履歴を前後に移動する場合を除いて、イベントは発生しません。これは私の目的にはかなり役に立ちません。
pjax/github のみのソリューションに制限することも検討しました。新しいページが読み込まれると、github が$(document).trigger('pageUpdate')
イベントを発生させますが、jQuery
これらは DOM イベント経由ではなく内部で実装されるため、ユーザー スクリプトが実行する隔離された世界からはそれらを聞くことができません。ページ自体に小さなリスナーを挿入して、そのjQuery
インスタンスにこのイベントを報告させない限り、ページ自体をハイジャックすることもできますhistory.pushState
。
これを達成するための他のきちんとした方法を見ている人はいますか?