2016-07-26 5 views
0

chromeの現在のタブのURLを変更してページをリロードします。 このコードを試しましたが、うまくいきませんでした。chrome extension:ページがロードされたイベントと更新url

background.js:

function updateUrl(){ 

    chrome.tabs.getCurrent(function (tab) { 

     var tabUrl = encodeURIComponent(tab.url); 

     var myNewUrl = tabUrl + "some text"; 

     chrome.tabs.update(tab.id, {url: myNewUrl}); 
    }) 
} 

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
    if (changeInfo.status == 'complete') { 

     updateUrl(); 

    } 
}) 

manifest.jsonを:

{ 
    "name": "test", 
    "version": "0.1", 
    "manifest_version": 2, 

    "permissions": [ 
    "tabs", 
    "webNavigation", 
    "http://www.example.com/*" 
    ], 

    "background": { "scripts": ["background.js"] }, 

    "content_scripts": 
    [ 
    { 
     "matches": ["http://www.example.com/*"], 
     "js": ["background.js", "jquery.js"] 
    } 
    ] 
} 

答えて

1

マニフェストから、あなたがコンテンツスクリプトやバックグラウンドスクリプトとしてbackground.jsを含めるしようとしているように見えます。 chrome.tabsはコンテンツスクリプトでは使用できないため、これは機能しません。

特定のユースケースに応じて、特定のURLを追加する場合は、これを達成するためにchrome.webRequest APIを使用できます。

background.js:

chrome.webRequest.onBeforeRequest.addListener(function (details) { 
    return { 
     redirectUrl: details.url + "some text" 
    } 
}, { 
    urls: ["http://www.example.com/*"] 
}, ["blocking"]); 

manifest.js:

{ 
    "name": "test", 
    "version": "0.1", 
    "manifest_version": 2, 
    "permissions": [ 
    "webRequest", 
    "webRequestBlocking", 
    "http://www.example.com/*" 
    ], 
    "background": { 
    "scripts": [ 
     "background.js" 
    ] 
    } 
} 

これは、すべての最後に "テキスト" を追加するには、ブラウザが "http://www.example.com/ *"

になり要請します

これを行うためにコンテンツスクリプトを使用する場合は、message passingを参照する必要があります。これにより、コンテンツスクリプトから背景スクリプト(chrome.tabsを使用できる)を呼び出すことができます。メッセージが送信されると、バックグラウンドページはタブを更新することができます。

0
  1. chrome.tabs.getCurrentは、このスクリプトが作成されているタブを取得するために使用されます。非タブコンテキストから呼び出された場合はundefinedが返されます(例:背景ページまたはポップアップビュー)。

    chrome.tabs.onUpdatedハンドブック内にタブがあるので、再度取得する必要はなく、そのまま使用することができます。あなたmanifest.jsonから

    function updateUrl(tabId, tabUrl){ 
        var myNewUrl = encodeURIComponent(tabUrl) + "some text"; 
        chrome.tabs.update(tabId, {url: myNewUrl}); 
    } 
    
    chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
        if (changeInfo.status == 'complete') { 
         updateUrl(tab.id, tab.url); 
        } 
    }); 
    
  2. background.jsが背景ページとコンテンツの両方のスクリプトのために使用されている、それは悪いデザインではないが、この質問のための根本的な原因です。

    論理を現在のWebページDOMを操作するためのコンテンツスクリプトと、拡張関連のものに使用される背景ページの2つの部分に分けることができる方が良いでしょう。

関連する問題