0

私はWebExtensions拡張でchrome.tabsを使用してwebNavigation.onHistoryStateUpdatedをキャッチしようとしています。バックグラウンドページのすべてのタブのonHistoryStateUpdatedイベントをキャッチ

問題は、私が唯一の私がすべて他のタブからonHistoryStateUpdatedイベントを聞くために作成した永続的なバックグラウンドページのonHistoryStateUpdatedイベントをキャッチすることができ、です!

tabs.onUpdatedイベントはバックグラウンドページから完全に正常に動作しますが、onHistoryStateUpdatedはブラウザのバック/フォワードイベントを捕まえなければなりません。


manifest.jsonを

{ 
    "manifest_version": 2, 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 

    "background": { 
    "page": "background.html", 
    "persistent": true 
    }, 

    "permissions": [ 
    "tabs", 
    "webNavigation" 
    ] 
} 

background.js

// Works not... (i.e. is not fired) 
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) { 
    console.log("tabid", tabId); 
}); 


// WORKS! 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {  
    console.log("Tab #" + tabId, " has its URL to: (" + changeInfo.status + ")"); 
    console.log("\t" + changeInfo.url); 
}); 
+0

'chrome.tabs.onUpdated'はヒストリナビゲーションを含むすべてのURL変更を捕捉するのに十分ですが、' chrome.webNavigation.onHistoryStateUpdated'は 'location.hash = '#newhash''のような直接URLハッシュ変更では発生しません – wOxxOm

+0

@ wOxxOm私は理解していますが、URLの変更がバック/フォワードボタンによるものかどうかを検出する必要があります(JavaScriptリダイレクト、リンクをクリックするなど) – boramalper

+0

この方法で「戻る」ボタンのナビゲーションを検出できます'forward'ボタンについてはわかりません:報告されたtransitionTypeは' link'です。うーん、おそらく、トランジションクォリファイアーと組み合わせると、それを推論することができます。また、必ず[Firefox 48以降](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webNavigation/onHistoryStateUpdated)を使用してください。 – wOxxOm

答えて

1

Chrome documentationWebExtensions documentationの両方が明示的にwebNavigation.onHistoryStateUpdatedイベントがときに発生すると述べていますhistory APIは、ロケーションバーのURLを変更するために使用されます。ユーザーがフォワードまたはバックボタンのいずれかをクリックしたときに、イベントが発生したと述べていません。

あなたはナビゲーションが戻って前方または上のユーザがクリックの結果であったことを判断したい場合は、webNavigation.onCommittedMDNイベントをリッスンする必要があります。情報は、"forward_back"の値がtransitionQualifiersMDNの配列に含まれています。そのような場合、transitionTypeは、ブラウザがもともとそのURLにナビゲートされていた方法として残っているように見えます。

関連する問題