2010-05-05 10 views
6

गूगल क्रोम के extension developer section में, यह कहना है एक विस्तार अंदरमैं क्रोम एक्सटेंशन में बीजी पेज से पॉपअप पेज डीओएम कैसे एक्सेस करूं?

HTML पृष्ठों एक दूसरे DOMS में पूर्ण पहुंच है, और वे एक दूसरे पर कार्यों को लागू कर सकते हैं। ... पॉपअप की सामग्री एक HTML फ़ाइल (popup.html) द्वारा परिभाषित एक वेब पेज है। पॉपअप कोड पृष्ठभूमि पृष्ठ (background.html) में है कि नकल करने की जरूरत नहीं है क्योंकि पॉपअप पृष्ठभूमि पृष्ठ

मैं लोड और jQuery परीक्षण किया है पर काम करता है आह्वान कर सकते हैं, और उपयोग कर सकते हैं Background.html में jQuery के साथ dOM तत्व, लेकिन मैं पृष्ठभूमि.html से popup.html में DOM तत्वों तक पहुंच प्राप्त करने का तरीका नहीं समझ सकता।

उत्तर

7

क्या आप चर्चा कर सकते हैं कि आप ऐसा क्यों करना चाहते हैं? एक पृष्ठभूमि पृष्ठ एक ऐसा पृष्ठ है जो आपके एक्सटेंशन के जीवनकाल के लिए हमेशा के लिए रहता है। जबकि पॉपअप पृष्ठ केवल तब होता है जब आप पॉपअप पर क्लिक करते हैं।

मेरी राय में, इसे अन्य तरीकों से दोबारा प्रतिक्रिया दी जानी चाहिए, आपके पॉपअप को पृष्ठभूमि पृष्ठ से कुछ अनुरोध करना चाहिए। तुम बस पॉपअप में ऐसा पृष्ठभूमि पृष्ठ का उपयोग करने के लिए: chrome.extension.getBackgroundPage()

लेकिन अगर आप जोर देते हैं, आप sendRequest() और onRequest साथ विस्तार पृष्ठों के साथ सरल संचार का उपयोग कर सकते हैं। शायद आप chrome.extension.getViews

+3

कल जब मैं जांच कर रहा था, मुझे एहसास हुआ कि पॉपअप क्षणिक प्रतीत होता है; प्रत्येक बार खोले जाने पर स्क्रिप्ट को फिर से लोड किया जाता है। मैंने माना था कि यह एक सतत वस्तु थी। लेकिन अब मुझे लगता है कि किसी भी पॉपअप स्थिति को पृष्ठभूमि में संग्रहीत करने की आवश्यकता है और पॉपअप खोले जाने पर लोड किया जाता है। –

3

मैं समझ सकता हूं कि आप ऐसा क्यों करना चाहते हैं क्योंकि मैंने स्वयं समस्या में भाग लिया है।

सबसे आसान बात जो मैं सोच सकता था, कॉलबैक की Google की विधि का उपयोग कर रहा था - sendRequest और onequequest विधियां भी काम करती हैं, लेकिन मुझे लगता है कि वे घबराहट और कम सरल हैं।

Popup.js

chrome.extension.getBackgroundPage().doMethod(function(params) 
{ 
    // Work with modified params 
    // Use local variables 
}); 

Background.html

function doMethod(callback) 
{ 
    if(callback) 
    { 
     // Create/modify params if needed 
     var params; 

     // Invoke the callback 
     callback(params); 
    } 
} 
+1

यह काम नहीं करेगा, आप सामग्री स्क्रिप्ट से पृष्ठभूमि पृष्ठ तक नहीं पहुंच सकते हैं। वे विभिन्न दुनिया में रहते हैं। सामग्री स्क्रिप्ट से पृष्ठभूमि पृष्ठ तक पहुंचने का एकमात्र तरीका मैसेजिंग के माध्यम से है। आप कुछ उदाहरणों के लिए स्टैक ओवरफ्लो पर त्वरित खोज कर सकते हैं। –

+1

@ मोहम्मद: प्रश्न एक पॉपअप पृष्ठ के बारे में है, सामग्री सामग्री नहीं। – Eric

0

अन्य उत्तर उल्लेख के रूप में, तुम इतनी तरह popup.js से background.js कार्यों कॉल कर सकते हैं:

var _background = chrome.extension.getBackgroundPage(); 
_background.backgroundJsFunction(); 

लेकिन पहुँच popup.js या background.js से popup.html, तो आप ऐसा जैसे संदेश वास्तुकला का उपयोग करना चाहिए रहे हैं:

// in background.js 
chrome.runtime.sendMessage({ property: value }); 

// in popup.js 
chrome.runtime.onMessage.addListener(handleBackgroundMessages); 
function handleBackgroundMessages(message) 
{ 
    if (message.property === value) 
     // do stuff 
} 

हालांकि, यह है, कि तुम तुल्यकालिक background.js से popup.js उपयोग कर सकते हैं लगता है बस जैसे आप सिंक्रनाइज़ रूप से अन्य तरीकों तक पहुंच सकते हैं। chrome.extension.getViews आपको पॉपअप window ऑब्जेक्ट प्राप्त कर सकता है, और आप इसका उपयोग फ़ंक्शंस कॉल करने, चर का उपयोग करने और डीओएम तक पहुंचने के लिए कर सकते हैं।

var _popup = chrome.extension.getViews({ type: 'popup' })[0]; 
_popup.popupJsFunction(); 
_popup.document.getElementById('element'); 
_popup.document.title = 'poop' 

नोट ताकि आप उस को संभालने के लिए है कि getViews()[] वापस आ जाएगी अगर पॉपअप खुला नहीं है,।

मुझे यकीन नहीं है कि किसी और ने इसका उल्लेख क्यों नहीं किया। शायद इस पर कुछ नुकसान या बुरी प्रथाएं हैं जिन्हें मैंने अनदेखा कर दिया है? लेकिन मेरे अपने विस्तार में सीमित परीक्षण में, ऐसा लगता है कि यह काम करता है।

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