Thursday, 15 January 2015

javascript - chrome extension, pass data from content to background -


मैंने एक क्रोम एक्सटेंशन बनाया है जिसमें manifest.json, content.js और background.js शामिल हैं Content.js में, मैं वर्तमान टैब के URL को निकाल रहा हूँ और background.js में, मैं एक नया टैब खोल रहा हूँ। मैं क्या करना चाहता हूं, जो काम नहीं करता है, वह यूआरएल को सामग्री से पास करना है और इसे उस यूआरएल में जोड़ना है जिसे मैं पृष्ठभूमि में बुला रहा हूं

content.js: <प्री> chrome.extension.onMessage.addListener (फ़ंक्शन (अनुरोध, प्रेषक, भेजना रेस्पॉन्स) {यदि (request.greeting == "गिम्यायोडेट्स") { Var आउटपुट = "यूआरएल ="; // यूआरएल var paramIndex = document.URL.indexOf ("?"); // यदि मिले, तो पैरामीटर में यूआरएल में किसी भी पैरामीटर के लिए '' के लिए चेक करें यदि ( पैरामींडएक्स & gt; -1) {आउटपुट + = दस्तावेज। URL.substring (0, पैरामींडेक्स);} प्रेषण भेजें ({डेटा: आउटपुट});} और {प्रेषित प्रेषण ({});}});

background.js: <प्री> var output2; Chrome.tabs.get चयनित (रिक्त, फ़ंक्शन (टैब) {chrome.tabs.sendMessage (tab.id, {ग्रीटिंग: "जिमियायोडेट्स"}, फ़ंक्शन (प्रतिक्रिया) {output2 = response.data;});}); Chrome.browserAction.onClicked.addListener (function () {chrome.tabs.create ({url: "http://www.google.com?" + Output2}, फ़ंक्शन (टैब) {chrome.tabs.executeScript (टैब। आईडी, {file: "content.js"}, फ़ंक्शन () {sendMessage ();});});});

जब मैं किसी खुले टैब से एक्सटेंशन चलाता हूं, तो वह एक नए टैब पर Google खोलता है, लेकिन यह Google URL में वर्तमान टैब के यूआरएल को संलग्न नहीं करता, जिसका अर्थ है 'आउटपुट' डेटा पृष्ठभूमि.जेएस को पारित न करें। क्या मैं गलत कर रहा हूं?

समस्या यह है कि आप संदेश भेजने के लिए पृष्ठभूमि पृष्ठ नहीं बता रहे हैं जब एक नया टैब खोला जाता है Chrome.tabs.get को कॉल केवल चयनित होता है जब एक्सटेंशन पहली बार चलाया जाता है - यह हर बार एक नया टैब खोला नहीं होता है।

आप दो सामग्री पृष्ठों के बीच मध्यस्थ के रूप में पृष्ठभूमि पृष्ठ का उपयोग कर सही रास्ते पर हैं, लेकिन मैं एक अलग दृष्टिकोण सुझाता हूं:

सामग्री स्क्रिप्ट को हर बार एक नया लोड करें टैब को मैनिफेस्ट फ़ाइल के माध्यम से खोला गया है:

  "content_scripts": [{"मैचों": ["& lt; all_urls & gt;" ], "जे एस": ["content.js"]}],   

एक बहुत ही सरल सामग्री स्क्रिप्ट का उपयोग करें जो कि पृष्ठभूमि के साथ ही वर्तमान यूआरएल पेज को संदेश भेजता है भार:

(content.js)

  var paramIndex = document.URL.indexOf ('?'); यदि (पैरामींडेक्स & gt; -1) {chrome.runtime.sendMessage ({output2: 'URL =' + document.URL.substring (0, paramIndex)}); }   

जब पृष्ठभूमि पृष्ठ संदेश प्राप्त करता है तो यह एक वैश्विक चर में यूआरएल को बचाता है:

(background.js)

  Var आउटपुट 2; Chrome.extension.onMessage.addListener (फ़ंक्शन (अनुरोध, प्रेषक, प्रेषण भेजें) {output2 = request.output2;});   

आप तब उस यूआरओ लोड कर सकते हैं जब क्रिया बटन क्लिक किया जाता है:

(background.js)

  क्रोम.ब्राउज़र एक्शन। OnClicked.addListener (कार्य () {chrome.tabs.create ({url: "http://www.google.com?" + Output2});});    

No comments:

Post a Comment