我将以下脚本(位于我自己的服务器上)插入第三方的外部页面:www.test.com/test.html:
<script type="text/javascript">
(function() {
var protocol = (("https:" == document.location.protocol) ? "https://" : "http://");
var ttScript = document.createElement('script');ttScript.async = true;
ttScript.src = '//www.example.com/script/mycode.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ttScript);
})();
</script>
这是我想要动态注入的另一个脚本,请注意它不能添加到上面的脚本中!我希望这个脚本动态可用。
这个完整的代码稍后将存储在对象message.jsScript
<script type="text/javascript">
var tt_totalordervalue;
function tt_getordervalue(){
tt_totalordervalue=$('#subtotal');
console.log(tt_totalordervalue);
}
</script>
在档案mycode.js
中:
我想动态添加上面的脚本并调用其中定义的函数tt_getordervalue
,我现在尝试按以下方式执行此操作。请注意,我还想将动态脚本中定义的变量tt_totalordervalue
的值分配给mycode.js
中的变量:
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(message.jsScript);
console.log('script added');
tt_getordervalue();
console.log('function called');
var val = tt_totalordervalue;
然而,然后我收到错误Uncaught NotFoundError: Failed to execute 'appendChild' on 'Node': The new child element is null.
为什么?
答案 0 :(得分:1)
以下是关于Mac上的chrome工作(对不起,太懒了,不能交叉测试):
var script = document.createElement('script');
script.innerHTML = 'window.doStuff = function(){alert("do")}';
document.getElementsByTagName('body')[0].appendChild(script);
doStuff();