编辑:已解决,请参阅下面的答案。使用jsonp提取运行脚本标记
我试图解决的问题是广告加载脚本,它用jsonp加载广告代码并将其插入到dom中。
现在有时广告代码会包含javascript标签,并从一些帖子在这里stackoverflow我有这样的想法,将它们移动到文档的头,使他们运行,这一些实验后,促使我问这个问题:
Appending scripts to head using javascript - weird behavior
我的问题没有得到解决,但问题仍然存在,我插入脚本到我的测试DIV不能运行,也没有运行时移动到头部。
我这里有一个代码示例:
和简单的JSONP例子在这里:
在P2上的代码将尝试登录信息到控制台,提醒消息,然后设置一个变量,然后我尝试打印出来,所有这些事情都失败了。
是使用eval函数运行这样的代码的唯一方法,还是我在做一些基本的错误?
这里是第一部分的代码:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
if (typeof JSONP === 'undefined') {
/*Lightweight JSONP fetcher - www.nonobtrusive.com*/
var JSONP = (function(){
var counter = 0, head, query, key, window = this;
function load(url) {
var script = document.createElement('script'),
done = false;
script.src = url;
script.async = true;
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
script.onload = script.onreadystatechange = null;
if (script && script.parentNode) {
script.parentNode.removeChild(script);
}
}
};
if (!head) {
head = document.getElementsByTagName('head')[0];
}
head.appendChild(script);
}
function jsonp(url, params, callback) {
query = "?";
params = params || {};
for (key in params) {
if (params.hasOwnProperty(key)) {
query += encodeURIComponent(key) + "=" + encodeURIComponent(params[key]) + "&";
}
}
var jsonp = "json" + (++counter);
window[ jsonp ] = function(data){
callback(data);
window[ jsonp ] = null;
try {
delete window[ jsonp ];
} catch (e) {}
};
load(url + query + "callback=" + jsonp);
return jsonp;
}
return {
get:jsonp
};
}());
}
JSONP.get('http://m.iijax.com/p2.php', { requestType:'demoRequest'}, function(data){
var adC = document.getElementById("testId");
adC.innerHTML = data.code;
// Move script tags to head
var scripts = adC.getElementsByTagName("script");
for(i=scripts.length - 1;i>-1;i--) {
document.head.appendChild(scripts[i]);
}
// Now check value of var letsSeeIfThisIsDefined, set in the fetched code
console.log(letsSeeIfThisIsDefined);
});
</script>
</head>
<body>
<div id="testId"></div>
</body>
</html>
我认为你缺少具有“src”脚本的src标记 – James