2010-06-16 16 views
5

संदेश का जवाब देने वाली बहुत सारी इंजेक्शन स्क्रिप्ट्स मैं क्रोम के लिए बबल अनुवाद के समान सफारी एक्सटेंशन को कोड करने का प्रयास कर रहा हूं।सफारी एक्सटेंशन -

जब आप टूलबार पर एक बटन क्लिक करते हैं, तो यह स्वचालित रूप से Google भाषा API का उपयोग करके आपकी पसंद की भाषा में चयनित पाठ का स्वचालित रूप से अनुवाद करता है।

मैं निम्नलिखित इंजेक्शन स्क्रिप्ट का उपयोग पर प्रकाश डाला पाठ मिलता है और परिणाम प्रदर्शित (कुछ समय के लिए एक चेतावनी के रूप में) करने के लिए: http://pastebin.com/bYVuQAmp

मैं निम्नलिखित वैश्विक स्क्रिप्ट का उपयोग इंजेक्शन स्क्रिप्ट यदि आवश्यक कॉल करने के लिए: hxxp: //pastebin.com/VHaAKM5a

समस्या मैं है निम्नलिखित:

स्क्रिप्ट सिर्फ मुख्य पेज में, लेकिन यह भी विज्ञापनों और इसी तरह के सामान है कि पेज में एम्बेडेड है में इंजेक्शन हो जाता है। इसके कारण, चयनित टेक्स्ट को कई बार अनुवादित किया जाता है क्योंकि एक पृष्ठ में सभी एम्बेडेड स्क्रिप्ट संदेश का जवाब देती हैं।

मैं कैसे सुनिश्चित कर सकता हूं कि स्क्रिप्ट केवल सही पृष्ठ में इंजेक्शन दी गई है या केवल सही पृष्ठ जवाब देता है?

धन्यवाद,

फिलिप

उत्तर

1

शायद तुम जांच कर सकता है कि पृष्ठ में स्क्रिप्ट इंजेक्ट किया जाता है एक फ्रेम के अंदर नहीं है:

if (window == window.parent) { /* you're not inside a frame! */ } 

अगर यह काम करता है मुझे यकीन है कि नहीं कर रहा हूँ हालांकि <object> टैग्स के अंदर से HTML को एम्बेड करना। संभावना है कि हाँ।

3

वैश्विक स्क्रिप्ट इंजेक्शन स्क्रिप्ट से संदेश का जवाब देता है, इसलिए की तरह प्रतिक्रिया संदेश में लक्ष्य टैब का यूआरएल, शामिल हैं:

var message = { 
    translation: result.translation, 
    url: event.target.url 
} 
event.target.page.dispatchMessage("displayTranslation", message); 

फिर, इंजेक्शन स्क्रिप्ट के संदेश हैंडलर में, कि url की जांच इस तरह से, फ्रेम उस अनुरोध को प्रतिक्रिया पर कार्य करेगा उत्पन्न में केवल स्क्रिप्ट

if (event.name === "displayTranslation" && 
    event.message.url === window.location.href) { 
    alert(event.message.translation); 
} 

: संदेश में पारित पृष्ठ uRL से मेल, इसलिए पसंद है।

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