2012-02-11 106 views
15

我玩弄了一些鍍鉻的擴展,我發現這個例子:http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/如何讓頁面動作出現在特定頁面上?

一切工作正常,但我想創建自己的擴展,我想看看在特定網站上的page_action圖標,而不是那些以'克'在他們的網站。 所以,我想簡單地從該改劇本:

// Copyright (c) 2011 The Chromium Authors. All rights reserved. 
// Use of this source code is governed by a BSD-style license that can be 
// found in the LICENSE file. 

// Called when the url of a tab changes. 
function checkForValidUrl(tabId, changeInfo, tab) { 
// If the letter 'g' is found in the tab's URL... 
if (tab.url.indexOf('g') > -1) { 
// ... show the page action. 
chrome.pageAction.show(tabId); 
} 
}; 

// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 

進入這個:

chrome.pageAction.show(tabId); 

但現在不工作... 我不明白這一點。很明顯,我可以使用解決方法,但這不是重點......首先,我必須創建一個後臺頁面來執行此操作嗎?我想是的,但我不明白爲什麼,爲什麼.show方法不能單獨工作? 我嘗試了谷歌文檔和材料中進行搜索,但我找不到任何有用的東西我不是專家,這一直是我的第一天下午在谷歌擴展度過的,但我應該怎麼知道「chrome.page.show (tabId)「必須放在後臺頁面,如果它沒有寫在任何地方?沒有意圖批評,但你們是怎麼找到的?所有的chrome方法都必須放在後臺頁面中? 那麼,肯定會有更多的問題,那麼它的合法性。希望你能給我至少一個答案!

+0

你給它一個有效的'tabId'? – abraham 2012-02-12 00:19:24

回答

28

http://code.google.com/chrome/extensions/pageAction.html
... ...說

默認情況下,頁面動作是隱藏的。當您顯示它時,您可以指定圖標應顯示的 選項卡。直到 的標籤被關閉圖標保持可見或開始顯示不同的URL(因爲 用戶點擊一個鏈接,例如)。

因此,即使您的tabid有效,它也會很快消失,因爲您只在運行後臺頁面時運行chrome.pageAction.show(tabId);
您需要檢查在後臺更改標籤不斷因爲pageactions不具有匹配/ exclude_matches設置在清單中,如內容的腳本做的(可惜)。所以你必須檢查自己並對變化做出反應。
如果你想讓它爲特定網站的工作只是將其更改爲類似...

// Copyright (c) 2011 The Chromium Authors. All rights reserved. 
// Use of this source code is governed by a BSD-style license that can be 
// found in the LICENSE file. 

// Called when the url of a tab changes. 
function checkForValidUrl(tabId, changeInfo, tab) { 
// If the tabs url starts with "http://specificsite.com"... 
if (tab.url.indexOf('http://specificsite.com') == 0) { 
// ... show the page action. 
chrome.pageAction.show(tabId); 
} 
}; 

// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 
+0

明白了,非常感謝。我讀過你引用的那段話,但顯然我並沒有明白這一點! – Treferwynd 2012-02-12 09:59:48

+0

Mmh的,你能回答這個問題太: 假設bg.js是包含文件(包含** **只),我引用的代碼(或你所引用的一個)。爲什麼,如果我這樣寫:在它的工作的background.html,但如果我嘗試寫的代碼直接在background.html它不? – Treferwynd 2012-02-14 00:19:56

+4

我的猜測是你的清單文件中有''manifest_version「:2',它將不允許嵌入',要麼在清單中刪除'「manifest_version」:2',或者將清單的背景部分改爲''background「: {「scripts」:[「bg.js」]} ...... ......直到現在才知道你可以做最後一個。 – PAEz 2012-02-14 07:07:13

1

對於那些正在尋找一種方式來處理子域,如果你有一個子域,例如博客網站.specificsite.com,還是需要使用通配符,您還可以使用正則表達式這種格式

function checkForValidUrl(tabId, changeInfo, tab) 
{ 
    if(typeof tab != "undefined" && typeof tab != "null") 
    { 
     // If the tabs URL contains "specificsite.com"... 
     //This would work in the same way as *specificsite.com*, with 0 or more characters surrounding the URL. 
     if (/specificsite[.]com/.test(tab.url)) 
     { 
      // ... show the page action. 
      chrome.pageAction.show(tabId); 
     } 
    } 
}; 

// Listen for any changes to the URL of any tab. 
chrome.tabs.onUpdated.addListener(checkForValidUrl); 

相匹配的URL內子。它還有助於計算執行空/未定義檢查以避免額外的異常處理。

相關問題