30

私は Google Chrome 拡張機能の開発を始めたばかりで、私のプロジェクトでは、クリックすると現在開いているページ/タブの URL を出力する拡張機能を作成する必要があります。

したがって、Google のホームページで拡張機能をクリックすると、拡張機能内の出力として" https://www.google.com/ " を取得する必要があります。

JavaScript を使用してこれを行う必要があり、理解しているコードとその仕事を行うコードを見つけることができません。「window.location」と「document.href」などの使用について読みましたが、現在のタブではなく、拡張機能の URL だけが表示されませんか?

始めるのを手伝ってください。前もって感謝します。

4

10 に答える 10

34

JavaScript を使用すると、ポップアップで JavaScript を使用しない場合に機能します。ポップアップの JavaScript はポップアップの URL を返すため、ポップアップでは Chrome タブ API を使用し、Chrome マニフェストで権限を設定する必要があります。

chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
    console.log(tabs[0].url);
});

最善の方法は、ChromeタブAPIを使用することです

于 2013-08-26T06:17:21.717 に答える
8

「現在のタブ」の意味に注意する必要があります。ユーザーが複数のウィンドウを開いており、それぞれに複数のタブがある場合、Chrome は「現在のウィンドウ」を、chrome.tabsAPIを利用するコンテンツ スクリプトを実行しているウィンドウとして定義します。それは私に起こり、「現在の」ウィンドウではなく、最後にフォーカスされたウィンドウを参照することで解決しました:

chrome.tabs.query({ active: true, lastFocusedWindow: true }, function (tabs) {
    // Do something
});

参考文献:

https://developer.chrome.com/extensions/windows#current-window https://developer.chrome.com/extensions/tabs#method-query

それが役に立てば幸い!

于 2015-03-19T17:52:44.817 に答える
1

chrome.tabs.query()複数のコンテンツ スクリプトから短時間で呼び出されると、とchrome.tabs.getCurrentが競合状態になることに注意してください

返されるタブは、必ずしもリクエスタのタブであるとは限りません。

これを行う簡単な方法は、バックグラウンド スレッドにメッセージを送信することです。このメッセージには、tabパラメーターとして送信タブが含まれています。

バックグラウンド スレッドは、このパラメーターを受け取り、メッセージへの応答に直接含めることができます。

これにより競合状態が防止されるだけでなく、非同期操作を使用しないため (への呼び出しとは異なりchrome.tabs.query()) 、高速になります。

例:

コンテンツ スクリプト

var myTab;
chrome.runtime.sendMessage({ message: "get_tab_msg" }, (response) => {
    myTab = response.tab;
});

バックグラウンド スクリプト

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.message === "get_tab_msg") {
        // The content script has asked for the tab.
        sendResponse({tab: sender.tab});
    }
});

于 2021-11-04T22:18:55.640 に答える
0

これは私のために働いた

chrome.tabs.query({
active: true,
lastFocusedWindow: true
}, function(tabs) {
// and use that tab to fill in out title and url
var tab = tabs[0];
console.log(tab.url);
alert(tab.url);
 });
于 2015-09-11T18:32:10.850 に答える