2012-02-11 10 views
15

मैं कुछ क्रोम एक्सटेंशन के साथ चारों ओर खेल रहा था और मैं इस उदाहरण पाया: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/मैं विशिष्ट पृष्ठों के लिए पेज_action कैसे दिखूं?

सब कुछ ठीक काम करता है, लेकिन मैं अपने खुद के एक्सटेंशन बनाने के लिए चाहता हूँ और मैं किसी विशिष्ट साइट पर 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); 

लेकिन अब यह काम नहीं करता है ... मैं इसे नहीं मिलता है। जाहिर है, मैं एक वर्कअराउंड का उपयोग कर सकता हूं, लेकिन यह बात नहीं है ... सबसे पहले, क्या मुझे ऐसा करने के लिए पृष्ठभूमि पृष्ठ बनाना चाहिए? मुझे हां लगता है लेकिन मैं नहीं देख सकता क्यों, और क्यों। शो विधि अकेले काम नहीं करती है? मैंने Google दस्तावेज़ और सामान में खोज करने की कोशिश की, लेकिन मुझे कुछ भी उपयोगी नहीं मिला, मैं कोई विशेषज्ञ नहीं हूं और यह मेरी पहली दोपहर को Google एक्सटेंशन पर खर्च किया गया है, लेकिन मुझे कैसे पता होना चाहिए कि "chrome.page.show (tabId) "पृष्ठभूमि पृष्ठ में जाना चाहिए यदि यह कहीं भी लिखा नहीं गया है? आलोचना करने का कोई इरादा नहीं है, लेकिन आप लोगों को कैसे पता चला? सभी क्रोम विधियों को पृष्ठभूमि पृष्ठ में जाना चाहिए? ठीक है, निश्चित रूप से और अधिक प्रश्न तो इसके कानूनी क्या हैं। आशा है कि आप मुझे कम से कम एक जवाब दे सकते हैं!

+0

क्या आप इसे वैध 'tabId' दे रहे हैं? – abraham

उत्तर

28

http://code.google.com/chrome/extensions/pageAction.html
... कहते हैं ...

डिफ़ॉल्ट रूप से, एक पेज कार्रवाई छिपा हुआ है। जब आप इसे दिखाते हैं, तो आप टैब निर्दिष्ट करते हैं जिसमें आइकन दिखाना चाहिए। आइकन तक तब तक दिखाई देता है जब टैब बंद हो जाता है या एक अलग यूआरएल प्रदर्शित करना शुरू होता है (क्योंकि उपयोगकर्ता एक लिंक पर क्लिक करता है)।

तो यदि आपका टैबिड मान्य था तो भी आपके पृष्ठ को चलाने के बाद एक बार आपके केवल chrome.pageAction.show(tabId); के रूप में बहुत तेज़ी से गायब हो जाएगा।
आपको लगातार पृष्ठभूमि में टैब में परिवर्तनों की जांच करने की आवश्यकता है क्योंकि पृष्ठ पर प्रतिक्रियाओं में सामग्री स्क्रिप्ट्स (करुणा) जैसे मैनिफेस्ट में मिलान/बहिष्करण_मैट्स सेटिंग्स नहीं होती हैं। तो आपको खुद को जांचना होगा और परिवर्तनों का जवाब देना होगा।
आप इसे एक विशिष्ट साइट के लिए काम करने के लिए चाहते हैं, बस कुछ तरह के लिए इसे बदल ...

// 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

+0

एमएमएच, आप इस प्रश्न का उत्तर भी दे सकते हैं: मान लीजिए bg.js वह फ़ाइल है जिसमें फ़ाइल उद्धृत किया गया है (और केवल ** ** ** है) (या जिसे आपने उद्धृत किया है)। अगर मैं इसे लिखूं: पृष्ठभूमि.html में यह काम करता है, लेकिन अगर मैं सीधे पृष्ठभूमि में कोड लिखने का प्रयास करता हूं तो यह नहीं है? – Treferwynd

+4

मेरा अनुमान है कि आपके पास अपनी मेनिफेस्ट फ़ाइल में 'manifest_version ": 2' है, जो 'का उपयोग करें, या अपने मैनिफेस्ट में' manifest_version": 2' को हटाएं, या मैनिफेस्ट के पृष्ठभूमि भाग को भी पृष्ठभूमि में बदलें: {"स्क्रिप्ट": ["bg.js"]} '... नहीं पता था कि आप अभी तक आखिरी तक कर सकते हैं। – PAEz

1

एक तरह से, सब-डोमेन को संभालने के लिए अगर आप एक उप डोमेन जैसे ब्लॉग के साथ एक साइट है की तलाश में उन लोगों के लिए .specificsite.com, या वाइल्डकार्ड का उपयोग करने की जरूरत है, तो आप भी regex इस प्रारूप

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 में स्ट्रिंग मिलान करने के लिए उपयोग कर सकते हैं। यह अतिरिक्त अपवाद हैंडलिंग से बचने के लिए गणना के साथ एक शून्य/अपरिभाषित जांच करने में भी मदद करता है।

संबंधित मुद्दे