我正在使用腳本標記hack和jsonp進行跨域請求。在回調函數中,我想使用document.write()將接收到的數據寫入DOM。document.write in jsonp callback
我知道我應該使用appendChild/innerHTML而不是doc.write()。我的約束是我沒有一個class/id掛鉤到我想要寫入的元素。我只能依靠document.write()來寫「就地」。
下面的代碼包含在HTML DIV中的腳本標記:
function request_jsonp(){
var script = document.createElement('script');
var server_path = 'http://somedomain.com/?q=querystring&callback=request_callback';
script.setAttribute('src', server_path);
document.getElementsByTagName('head')[0].appendChild(script);
console.log('data requested');
// document.write('hello world'); // this gets written
}
function request_callback(data){
console.log('data received');
document.write(data);
}
request_jsonp();
window.onload = function(){
console.log('onload fired');
}
/*
above code prints
data requested
data received
onload fired
*/
基本文件撰寫甚至不與回調函數內的靜態字符串工作。我認爲如果在onload之前調用docment.write,它會在頁面中插入文本here JavaScript and HTML Script Tags
什麼是阻止document.write()寫入DOM?另外,有沒有更好的方法來做到這一點。
「我沒有一個class/id掛鉤到我要寫入的元素。」 - 然後通過GET參數的jsonp發送它。 – kirilloid 2011-12-28 13:29:39
我想我沒有說清楚。要通過GET發送,首先需要在元素上存在一個id/class。 – Yogesh 2011-12-28 14:12:56
您可以在所有其他元素中只使用一個索引,例如:'Array.prototype.indexOf.call(document.getElementsByTagName('*'),element)' – kirilloid 2011-12-28 14:48:06