我正在使用脚本标记hack和jsonp进行跨域请求。在回调函数中,我想使用document.write()将接收到的数据写入DOM。
我知道我应该使用appendChild / innerHTML而不是doc.write()。我的约束是我没有一个类/ 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
*/
基本上,即使回调函数中包含静态字符串,document.write也不起作用。我认为如果在onload之前调用docment.write,它会在页面中插入文本here JavaScript and HTML Script Tags
什么阻止document.write()写入DOM?另外,有没有更好的方法来做到这一点。
答案 0 :(得分:1)
您应该注意document.write();
调用隐式document.open();
,因此,实际上,清除了目前为止您在文档中拥有的所有内容。
使用document.write();
将内容添加到文档是不可能的。但是,可以使用document.write();
来编写整个文档。
您有几种可能的解决方案:
myIFrame.document.write();
更新其内容。这基本上是因为您正在更新作为脚本代码父级的容器的内容,因此尚未关闭。
不管怎样,或者我完全偏离这里,让我们面对它,完全有可能。 ; - )