2012-10-14 179 views
4

我希望能夠獲得用戶所在標籤的當前網址,而不必強制用戶點擊彈出按鈕。我已經得到一個腳本來確定用戶點擊彈出圖標的位置,並且所有事情都按照它應有的方式工作,但爲了嘗試並實現我目前的目標(不按下按鈕即可這樣做),我將代碼複製並粘貼到背景頁面,並沒有得到任何結果。我的猜測是我需要一些積極的傾聽者或者其他的東西。Chrome擴展 - 從沒有彈出窗口的背景頁面獲取標籤url

這是我得到的彈出按鈕

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script> 
<script> 
window.addEventListener("load", windowLoaded, false); 
function windowLoaded() { 
    chrome.tabs.getSelected(null, function(tab) { 
     //doing stuff with the url 
    }); 
} 
</script> 

回答

-3

在你的Chrome瀏覽器擴展工作的JavaScript,您可能需要在後臺運行的文件。 Check out this Developer article在創建頁面時調用background.js

這將允許您在您的文件中放置代碼,該代碼在啓用擴展時仍然存在。

+0

您好,在這個問題中,用戶聲稱已在使用一個背景頁面。另外,如果鏈接包含此問題的答案,則應將其發佈在答案中以避免鏈接腐爛。祝你好運! :) – jmort253

+0

如果我有一個'background.js'頁面,我該如何使用jquery – bs7280

+0

以及如何修改'window.addEventListener(「load」,windowLoaded,false);' – bs7280

5

按照文檔打包應用程序,這可能會或可能不會進行功能擴展相同,您可以使用從chrome.app API的的onLaunched事件來運行代碼時,應用程序啓動:

// start doing something when the app first loads.... 
chrome.app.runtime.onLaunched.addListener(function() { 
    // all your monitoring code will go here 

}); 

注如果構建擴展,並且擴展應該在瀏覽器加載後立即開始監聽,則可能不需要聲明「onLaunched」偵聽器。

此外,假設您想要始終知道用戶在當前活動選項卡中的URL,則需要監視活動選項卡的更改。該Chrome Tabs API包含了大量的信息,這將有助於你的標籤從推廣工作,例如,這裏是監視更改活動標籤的代碼:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    console.info("This is the url of the tab = " + changeInfo.url); 
    // do stuff with that url here.... 
}); 

如果用戶在活動的URL改變標籤,這個處理器將監測這種變化:

chrome.tabs.onActivated.addListener(function(activeInfo) { .. } 

然而,onActivated文檔說以下內容:

時觸發在窗口中進行更改活動標籤。請注意,此事件觸發時,標籤的URL可能不會被設置,但您可以偵聽onUpdated事件,以便在設置URL時收到通知。

因此,您很可能只是使用onUpdated事件示例。

當您在背景頁面中遇到您希望注入JavaScript的頁面時,例如,要使用JavaScript更改網頁的背景顏色,可以使用下面的代碼:

chrome.tabs.executeScript(null, 
          {code:"document.body.bgColor='red'"}); 

記住,你的背景頁不能直接運行JavaScript或操縱的web頁面的DOM;因此,您需要以這種方式注入代碼,其中包括注入諸如jQuery和其他您需要的資源。

不要忘記在清單中允許選項卡權限和背景頁面。JSON:

/* in manifest.json */ 
"permissions": [ 
    "tabs", "http://*/*" 
], 
"background": { 
    "scripts": ["background.js"] 
}, 

要jQuery注入的頁面,你基本上寫建立一個腳本元素代碼,然後你會注入到這一點的頁面:在雙

chrome.tabs.executeScript(null, 
    {code: 
     "var script = document.createElement('script');" + 
     "script.setAttribute('src', '//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');" + 
     "script.setAttribute('type','text/javascript');" + 
     "document.getElementsByTagName('head')[0].appendChild(script);" 

    } 
); 

代碼報價不會在您的後臺頁面中運行。相反,它在注入頁面時運行。我在雙引號內使用單引號,因此解析器不會感到困惑,並且會拋出字符串文字錯誤。

請注意,可能有更好,更乾淨的方法將這些代碼注入頁面,但對於小的輕微注入,這就足夠了。

請記住,如果jQuery已被注入頁面,您可能會遇到衝突。

+0

我可以看到如何讓jquery工作的具體示例嗎?我正在使用由谷歌託管的jquery文件 – bs7280

+0

查看我最後包含的示例。 – jmort253

+0

'tabs.executeScript期間出錯:未知錯誤。 ' – bs7280

3

另一種方法:從 內容腳本得到它,並將其發送到後臺頁面:

url = window.location.href; 

    chrome.runtime.sendMessage({greeting: url}, function(response) { 
    }); 
在background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
     var url=message.greeting; 
} 
+0

似乎是在background.js中運行的錯誤 –

相關問題