facebook.com
で、「リンク」をクリックすると新しいページが読み込まれるように見えますが、(私は)実際には既存のページを新しいコードで更新するだけですが、その新しいコンテンツが完全に読み込まれたことをどのように知ることができますか?たとえば、に移動するとfacebook.com
、「ホームページ」ページ(ニュースフィード)から開始します。ナビゲーションバーで自分の名前をクリックすると、に移動しますfacebook.com/yourname
。ただし、ユーザースクリプトはリロードされないため、実際には新しいページではありません。
このため、ページの現在のhrefが変更されたかどうかを監視するユーザースクリプト用の小さなチェッカーを作成しました。
var startURL;
var curURL;
function main() {
startURL = window.location.href;
console.log("initial page. src: "+startURL);
setInterval(checkfornewpage, 500);
}
function checkfornewpage() {
curURL = window.location.href;
if(curURL != startURL) {
console.log("new page. src: "+curURL);
// do something
startURL = curURL;
}
}
main();
これは正常に機能し、ページが変更されたときに通知されます。しかし、その新しいページ内の要素にアクセスしようとすると、戻ってきたのは古いページからのものであることがわかりました。これは、window.location.href
が変更されても、ページの残りの部分が完全に読み込まれていないためだと思います。
そこで、新しいコンテンツが完全に読み込まれているかどうかを知るために、変更されることがわかっている新しいページのコンテンツを探すことにしました。body
のクラスのリストはbody
新しいページごとに常に異なるため、タグクラスを選択しました。これを監視する関数を作成しましたが、body
クラスリストが完全に変更された後でも、クエリで古いページデータが表示されます。
私も要素を呼び出しload()
てみましたbody
が、それは決して発生しません。
十分長く待つだけのジェネリックは使いたくないsetTimeout
...いつロードされるかを正確に知りたいので、すぐに先に進むことができます。アイデア?