7

मैं उपयोगकर्ता को यह तय करना चाहता हूं कि वे कब एक स्क्रिप्ट चलाने के लिए चाहते हैं, ताकि जब ब्राउज़र खुलता है, तो "ऑफ" आइकन दिखा रहा है और कोई स्क्रिप्ट नहीं चलती है; लेकिन जब उपयोगकर्ता इसे क्लिक करता है, तो यह "चालू" आइकन में बदल जाता है और उपयोगकर्ता द्वारा बंद होने तक उपयोगकर्तास्क्रिप्ट निष्पादित करता है। मेरे पास दो पीएनजी आइकन हैं जो 32x32 प्रत्येक हैं: on.png और off.pngक्रोम एक्सटेंशन के लिए बटन/आइकन कैसे चालू/बंद करें?

मेरे दो सवाल:

  1. मैं अपने off.png को डिफ़ॉल्ट आइकन सेट कर सकते हैं?

    ... 
    "browser_action": { 
        "default_icon": { 
         "32": "off.png" 
         }, 
        "default_title": "icon" 
    }, 
    "icons": { 
        "32": "on.png", 
        "32": "off.png" 
    }, 
    "background": { 
        "scripts": ["background.js"] 
    }, 
    "content_scripts": [{ 
        "js": ["SCRIPT.user.js"] 
    ... 
    
  2. यहाँ मेरी background.js, जहां मैं अस्थायी रूप से प्रयास करने के लिए एक त्वरित समारोह बना दिया गया है: मैं अपने manifest.json में यह करने की कोशिश की लेकिन यह आइकन निर्धारित नहीं किया है, बजाय एक पहेली टुकड़ा (मैं एक डिफ़ॉल्ट मान) से पता चला और/बंद के आधार पर टॉगल करके चालू एक onClicked

    var status = 0; 
    
    function toggle() { 
    if (status == 0){ 
        chrome.browserAction.setIcon({path: "on.png", tabId:tab.id}); // so it's set for the tab user is in 
        chrome.tabs.executeScript(tab.id, file:"SCRIPT.user.js"); //execute for this tab 
        status++; 
    } 
    if (status == 1){ 
        chrome.browserAction.setIcon({path: "off.png", tabId:tab.id}); 
        chrome.tabs.executeScript(tab.id, code:"alert()"); // execute nothing when off 
        status++; 
    } 
    if (status > 1) 
        status = 0; // toggle 
    } 
    
    chrome.browserAction.onClicked.addListener(function(tab) { 
        toggle(); 
    }); 
    

(मैं उल्लेख करना चाहिए कि जब मैं फ़ोल्डर आवास मेरी स्क्रिप्ट, माउस और में "लोड विस्तार अनपैक" प्रकट लोड करें और फिर "विचारों का निरीक्षण " सेवा मेरे जांचें कि क्या कुछ भी गलत है, मैं पृष्ठभूमि.जेएस में Uncaught SyntaxError: Unexpected token : देखता हूं, हालांकि मुझे नहीं पता कि यह किस बात का जिक्र कर रहा है) ... और ऐसा लगता है कि यह स्क्रिप्ट फ़ोल्डर

तो में मेरी उपयोगकर्तास्क्रिप्ट दिखाना प्रतीत नहीं होता है , कोई विचार, मदद?

उत्तर

8

ठीक है, तो मुझे अपने मैनिफेस्ट और पृष्ठभूमि पृष्ठों में कुछ बदलाव करने दें।

manifest.json

"browser_action": { 
    "default_icon": "off.png", 
    "default_title": "icon" 
}, 

कि डिफ़ॉल्ट off.png कर देगा। आइकन अनुभाग के लिए, docs को यह देखने के लिए पढ़ें कि इसका क्या उपयोग किया जाता है, लेकिन अभी इसे पूरी तरह से हटा दें। अपने कंटेंटScripts अनुभाग में जो भी है उसे हटा दें। यदि आप इसे प्रोग्रामेटिक रूप से इंजेक्ट करना चाहते हैं तो इसे मैनिफेस्ट में सूचीबद्ध करने की आवश्यकता नहीं है।

अगला अपनी पृष्ठभूमि पेज के लिए कुछ परिवर्तन उसे कुछ अतिरिक्त स्वच्छ बनाने के लिए:

background.js

var toggle = false; 
chrome.browserAction.onClicked.addListener(function(tab) { 
    toggle = !toggle; 
    if(toggle){ 
    chrome.browserAction.setIcon({path: "on.png", tabId:tab.id}); 
    chrome.tabs.executeScript(tab.id, {file:"SCRIPT.user.js"}); 
    } 
    else{ 
    chrome.browserAction.setIcon({path: "off.png", tabId:tab.id}); 
    chrome.tabs.executeScript(tab.id, {code:"alert()"}); 
    } 
}); 
+1

@tempcode मैं बस से पहले अपने कोड नकल की थी, लेकिन जब मैं इसे देख फिर मैं देखता हूं कि आपने '{}' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' {'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''~~~~~~~~~~~~~~~~~ ' – BeardFist

+0

ठीक है कि बाधा कूद गई, हम लगभग वहाँ हैं। उस फिक्स ने मुझे ऑफ से चालू करने की अनुमति दी * (मेरे पहले परीक्षण पर मुझे सामना करना पड़ा '' एक्सटेंशन मेनिफेस्ट को इस होस्ट तक पहुंचने के लिए अनुमति का अनुरोध करना चाहिए "- चूंकि आपने 'मेनिफेस्ट' में 'सामग्री-स्क्रिप्ट' अनुभाग को हटाने का सुझाव दिया था, जहां मेरे पास था 'मैचों' और 'बहिष्कृत', मैंने उस त्रुटि को ठीक करने के लिए 'अनुमतियां' जोड़ दी हैं) *, लेकिन एक अंतिम मामूली समस्या है: एक बार जब मैं इसे चालू करता हूं तो मैं इसे चालू करने के लिए क्लिक नहीं कर सकता, यह बस "चालू रहता है "जब तक पृष्ठ को पुनः लोड नहीं किया जाता है (कम से कम हम जानते हैं कि अद्वितीय 'tab.id' काम करता है)। लेकिन उस तरफ, बाकी काम कर रहे हैं। अब तक आपकी मदद के लिए धन्यवाद! – tempcode

+1

@tempcode ठीक है, तो ऐसा लगता है कि समस्या यह थी कि 'स्थिति' कुछ प्रकार का कीवर्ड है, इसलिए 'var status = false' ने' झूठा 'असाइन नहीं किया बल्कि '" गलत "' क्योंकि स्थिति पहले ही स्ट्रिंग होने के लिए परिभाषित की गई थी । वैरिएबल नाम को बदले में 'टॉगल' जैसे कुछ में बदलें। – BeardFist

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