繁体   English   中英

无法使用AJAX将脚本加载为纯文本

[英]Can't load script as plain text with AJAX

我在服务器上有一个javascript文件,无法修改。

这是我必须下载的脚本示例:

var tags = '';
tags += '<a href="#somelink"><img src="someimage.gif"/></a>;
document.write(tags);

我开始通过AJAX下载脚本并执行该脚本,但是遇到了“无法在异步调用中执行document.write”问题。

因此,我想以纯文本格式下载脚本,并从响应中获取所需内容,然后将其放在html页面中,而无需修改原始脚本。

$.ajax({
    type: "GET",
    url: "http://myurlexample.com",
    dataType: "text",
}).success(function(msg){
    console && console.log("The script was downloaded as text: "+msg);
}).error(function(object,status,errortxt){
    console && console.log("The script wasn't downloaded as text. The error:"+ errortxt);
});

但是,当我使用dataType = "text"进行下载请求时,AJAX会引发错误。 有什么办法可以解决此问题并实际将其下载为文本吗?

PS:该脚本适用于Firefox OS特权应用,因此我无法将脚本直接放在html页面中,因为安全CSP不允许使用该脚本( https://developer.mozilla.org/en-US/Apps / CSP )。

由于您似乎能够以某种方式成功运行脚本,因此这是一个可行的可怕想法:覆盖document.write

在运行脚本之前,请执行以下操作:

document.write = function(msg) {
    handleTagStringInApp(msg);
    delete document.write; // revert to original document.write when done
};
// now load execute the script...

其中handleTagStringInApp是您编写的以某种方式处理标签字符串的函数。 这基本上是JSONP,但是您不能将回调名称调整得不显眼或有用,而必须使用回调名称document.write

请注意,如果您的应用程序中的任何其他内容实际上需要使用document.write ,这将是非常糟糕的 (您可以通过保留对真实document.write的引用来解决此问题,例如,在页面加载时使用var realDocWrite = document.write;并使用realDocWrite.call(document, "whatever")对其进行调用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM