2013-06-18 6 views
5

मेरे पास यह सरल एक्सटेंशन है, यह क्रोम के टूलबार पर आइकन प्रदर्शित करता है और एक सक्षम/अक्षम बटन दिखाता है। मैं अक्षम या content_script.js जो गूगल की वेबसाइट पर जाकर पर आग सक्षम करने के लिए बटन को समारोह जोड़ना चाहते हैं:मैं Google एक्सटेंशन में content_scripts को चालू/बंद कैसे करूं?

popup.js

var setLayout = function(){ 
    var list = document.createElement('ul'); 

    var enable = document.createElement('li'); 
    enable.appendChild(document.createTextNode('Enable Script')); 
    enable.onclick = function(){toggle(0)}; 

    var disable = document.createElement('li'); 
    disable.appendChild(document.createTextNode('Disable Script')); 
    disable.onclick = function(){toggle(1)}; 

    list.appendChild(disable); 
    document.body.appendChild(list); 

    function toggle(n){ 
     list.removeChild(n == 0 ? enable : disable); 
     list.appendChild(n == 0 ? disable : enable); 
    } 
}; 

document.addEventListener('DOMContentLoaded', setLayout, false); 

manifest.json

{ 
    "manifest_version": 2, 

    "name": "test", 
    "description": "test", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["https://www.google.co.uk/"], 
     "js": ["content_scripts.js"] 
    } 
    ] 
} 

content_scripts.js

(function(){ 
    alert('hello'); 
})(); 

मैं Google एक्सटेंशन में नया हूं और मुझे नहीं पता कि यह कैसे करना है , मैंने अक्षम/सक्षम बटन पर क्लिक करने के बाद मैनिफिस्ट को बदलने के बारे में सोचा लेकिन Google वेबसाइट पर दस्तावेज़ पढ़ने के बाद ऐसा करने के लिए सही आदेश नहीं मिला!

किसी भी मदद की सराहना की जाएगी।

उत्तर

2

कुछ शोध के बाद मैंने यह पता लगाया कि backround pages, sendMessage और localstorage का उपयोग कर इसे कैसे हल किया जाए।

background pagespopup.js और content_scripts.js के बीच एक संवाददाता के रूप में काम करते हैं, वे दो अलग-अलग दस्तावेज़ों पर हैं और उनके बीच चर को पार करना संभव नहीं है।

पृष्ठभूमि पृष्ठ mamifest में मैं जोड़ा सक्षम करने के लिए:

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

localstorage स्थानीय रूप से चर को बचाने और उन्हें याद भी ब्राउज़र बंद और खोला जाता है फिर से है, इसलिए जब सक्षम/अक्षम बटन क्लिक किया यह localStorage['status'] = 1/0 सेट जो कर सकते हैं background.js के माध्यम से पहुंचा जा सकता है और content_scripts.js पर जाया गया है। background.js जो अनुरोध को सुनता है और पर

if(!localStorage.status) localStorage['status'] = 1; 
toggle(2); 
enable.onclick = function(){toggle(0)}; 
disable.onclick = function(){toggle(1)}; 
function toggle(n){ 
    if((n == 0) && (enable.parentNode == list)){ 
     list.removeChild(enable); 
     list.appendChild(disable); 
     localStorage.status = 1; 
    }else if((n == 1) && (disable.parentNode == list)){ 
     list.removeChild(disable); 
     list.appendChild(enable); 
     localStorage.status = 0; 
    }else if((n == 2) && (!list.hasChildNodes())){ 
     list.appendChild((localStorage.status == 1) ? disable : enable); 
     chrome.browserAction.setIcon({path: (localStorage.status == 1) ? "icons/icon19.png" : "icons/icon19_disabled.png"}); 
    }else{ 
     return; 
    } 
} 

localStorage.statuscontent_scripts.js को मैं content_scrips.js जो भरी हुई भेजने अनुरोध संदेश पर background.js करने पर sendMessage का इस्तेमाल किया था पारित करने के लिए, और onMessage:

localStorage चर सेट करने के लिए मैं popup.js को जोड़ा गया localStorage.status मान के साथ content_scripts.js पर प्रतिक्रिया भेजें।

background.js:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.type == "status") sendResponse({status: localStorage.status}); 
}); 

content_scripts।जेएस

var fn = function(){...}; 
chrome.runtime.sendMessage({type: "status"}, function(response) { 
    if(response.status == 1) fn(); 
    return; 
}); 

ऐसा है, उम्मीद है कि किसी को यह उपयोगी लगेगा।

1

कोड बल्कि मैनिफ़ेस्ट फ़ाइल से कुछ इस तरह का उपयोग कर, injecting the content script का प्रयास करें:

chrome.tabs.executeScript(null, {file: "content_script.js"}); 

फिर आप पृष्ठभूमि पृष्ठ और अपनी सामग्री स्क्रिप्ट के बीच message passing उपयोग कर सकते हैं या नहीं, सामग्री स्क्रिप्ट इंजेक्षन करने के लिए तय करने के लिए, या शायद कंटेंट स्क्रिप्ट में एक कथन कथन जो केवल तब चलता है जब एक्सटेंशन के एक्शन बटन द्वारा सेट किया गया ध्वज।

कार्रवाई बटन दबाए जाने पर आप browser action event का उपयोग कर सकते हैं।

+0

आपके उत्तर के लिए धन्यवाद लेकिन यह बहुत मदद नहीं करता है, मैं Google एक्सटेंशन के लिए बहुत नया हूं .. अगर आप अपने उत्तर पर अधिक विस्तार कर सकते हैं या दिखा सकते हैं कि मैं अपने कोड में अपना समाधान कैसे लागू कर सकता हूं तो यह बहुत अच्छा होगा। – razzak

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