質問: Chromeで拡張機能を作成しています。 とあるサイトでページを移動したかどうかを検知して 拡張機能側からDOMを操作したりしたいのですが、 対象のサイトはpushState、replaceStateを使ってURLを変更し、 ページ遷移をしているように見せかけているサイトなので、 ページロード時やDOM構築時のイベントハンドラを使用しても通常のページ遷移とは異なるため、イベントが発生しないタイミングがしばしばあります。 そのため、URLの変更を検知したらページ遷移とみなしてDOM操作を行おうと思いつきまして、 URLの変更を検知するイベントなどを探したのですが、自分の力では見当たりませんでした。 hashchangeが用途に似ているのですが、ハッシュを付加させたりしないと検知できないのでダメでした。 ハッシュ値以外のURL部分が変化したらイベントを発生させるようなことは実現できるのでしょうか。 毎秒location.urlを監視するというような無理やりなやり方以外でお願いしたいです。 よろしくお願いいたします。 ``` window.addEventListener("hashchange", funcRef, false); ```
回答: Firefoxの場合はこのようなonLocationChangeを実装すれば良いようですが、 chromeの場合はchrome.tabs.onUpdatedでイベントを拾って、 URLの差分をとって変更を検知するような仕組みはどうでしょうか。 またはpushState/replaceStateでURLが変わるということは、 DOMにも何かしらの変更が発生しているということで、 DOMの変更を検知して、URLの差分→変更検知でもいいかもしれません。