हाँ!
यह संभव है। ऐसा करने का एक तरीका WebWorkers का उपयोग करना होगा। वेबवर्कर्स में चल रहे कोड में आपके पृष्ठ चल रहे डीओएम या अन्य जावास्क्रिप्ट कोड तक कोई पहुंच नहीं है।
आप वेबवर्कर बना सकते हैं और इसके साथ JSONP अनुरोध निष्पादित कर सकते हैं, फिर इसे पूरा होने पर इसे समाप्त कर दें।
URL के साथ एक ब्लॉब से एक WebWorker बनाएँ स्थानीय कॉलबैक
साथ JSONP अनुरोध लोड करने के लिए
उपयोग importScripts
अनुरोध करने के लिए:
प्रक्रिया कुछ इस तरह है जब वह कॉलबैक निष्पादित होता है, तो स्क्रिप्ट पर एक संदेश पोस्ट करें, जो बदले में डेटा के साथ वास्तविक कॉलबैक संदेश निष्पादित करेगा।
इस तरह, एक हमलावर को डोम के बारे में कोई जानकारी नहीं होगी।
यहाँ एक sample implementation है:
// Creates a secure JSONP request using web workers.
// url - the url to send the request to
// data - the url parameters to send via querystring
// callback - a function to execute when done
function jsonp(url, data, callback) {
//support two parameters
if (typeof callback === "undefined") {
callback = data;
data = {};
}
var getParams = ""; // serialize the GET parameters
for (var i in data) {
getParams += "&" + i + "=" + data[i];
}
//Create a new web worker, the worker posts a message back when the JSONP is done
var blob = new Blob([
"var cb=function(val){postMessage(val)};" +
"importScripts('" + url + "?callback=cb" + getParams + "');"],{ type: "text/javascript" });
var blobURL = window.URL.createObjectURL(blob);
var worker = new Worker(blobURL);
// When you get a message, execute the callback and stop the WebWorker
worker.onmessage = function (e) {
callback(e.data);
worker.terminate();
};
worker.postMessage(getParams); // Send the request
setTimeout(function(){
worker.terminate();//terminate after 10 seconds in any case.
},10000);
};
यहाँ नमूना उपयोग कि JSFiddle में काम करता है:
jsonp("http://jsfiddle.net/echo/jsonp", {
"hello": "world"
}, function (response) {
alert(response.hello);
});
इस कार्यान्वयन कुछ अन्य मुद्दों से निपटने नहीं करता है, लेकिन यह करने के लिए सभी का उपयोग होने से बचाता है पृष्ठ पर डोम या वर्तमान जावास्क्रिप्ट, कोई safe WebWorker environment बना सकता है।
यह आईई 10 +, क्रोम, फ़ायरफ़ॉक्स और सफारी के साथ-साथ मोबाइल ब्राउज़र पर भी काम करना चाहिए।
स्रोत
2013-05-21 00:07:14