मैं अपना पहला क्रोम एक्सटेंशन लिख रहा हूं। मैं http://www.flickr.com पर किसी पृष्ठ पर एक छवि को विलुप्त करने के लिए jQuery और jQuery Image Desaturate plugin का उपयोग करने का प्रयास कर रहा हूं।SECURITY_ERR: Chrome एक्सटेंशन में getImageData का उपयोग करने पर DOM अपवाद 18
मैं प्रोग्राम के मेरी background.html में मेरी स्क्रिप्ट (और jQuery और प्लगइन) लोड हो रहा है कर रहा हूँ:
// On browser action click, we load jQuery and the desaturate plugin, then
// call our own flickrnoir.js to desaturate the photo.
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.executeScript(null, {file: "jQuery.desaturate.js" }, function() {
chrome.tabs.executeScript(null, { file: "flickrnoir.js" });
})
});
});
मैं अपने manifest.json
में फ़्लिकर पृष्ठों के लिए अनुमतियों को निर्दिष्ट किया है:
"permissions": [
"tabs", "http://www.flickr.com/", "http://*.static.flickr.com/"
]
ऐसा लगता है कि यह ठीक काम कर रहा है, और उदाहरण के लिए, मैं flickrnoir.js
पर इसे जोड़कर फ्लिकर फोटो पेज पर सभी divs की पृष्ठभूमि को चालू कर सकता हूं, और उसके बाद फ़्लिकर पेज खोल रहा हूं और अपने एक्सटेंशन के बटन पर क्लिक कर सकता हूं:
$("div").css("background-color", "#ff0000");
... इसलिए, मैंने सफलतापूर्वक jQuery लोड किया है और यह http://*.flickr.com/*
पृष्ठ के DOM तत्वों को सफलतापूर्वक एक्सेस और परिवर्तित कर सकता है।
हालांकि, जब मैं किसी छवि को असंतृप्त करने के लिए असंतृप्त प्लगइन का उपयोग करने का प्रयास करता हूं (या वास्तव में सभी छवियां) मैं सुरक्षा त्रुटि में चला जाता हूं। मेरे कोड:
$("img").desaturate();
... अंत में इस लाइन चल jQuery.desaturate प्लगइन के कोड में समाप्त होता है:
Uncaught Error: SECURITY_ERR: DOM Exception 18
:
var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);
उस समय, क्रोम एक सुरक्षा अपवाद फेंकता
... और यह मुझे मेरे ट्रैक में बंद कर देता है।
संपादित करें: ठीक है, तो मुझे लगता है कि यह पृष्ठ www.flickr.com
पर है, जबकि छवि मैं कैनवास में कॉपी कर रहा हूं farm6.static.flickr.com
पर है? क्या यह क्रॉस-डोमेन नीति का उल्लंघन कर रहा है?
मैं वास्तव में क्रोम एक्सटेंशन सुरक्षा मॉडल, या canvas
पर क्रॉस-डोमेन प्रतिबंधों के साथ परिचित नहीं हूं, या दोनों कैसे इंटरैक्ट करते हैं, इसलिए मैं इसे समझने में आपको जो भी सहायता दे सकता हूं, लेकिन निश्चित रूप से, मेरा मूल प्रश्न यह है कि - मैं इस सुरक्षा अपवाद को कैसे प्राप्त करूं और अपना कोड काम कर रहा हूं?
शानदार, बस मुझे आवश्यक जानकारी। मेरा विस्तार अब काम कर रहा है और खुशी से फोटो को असंतृप्त कर रहा है। (और मुझे यूनिकॉर्न मिल गया!) –