永远不要使用用户脚本中的.onload
,.onclick
等。 (在常规网页中这也是不好的做法)。
原因是用户脚本在沙箱(“孤立世界”)中运行,您不能在 Chrome 用户脚本或内容脚本中设置或使用页面范围的 javascript 对象。
始终使用addEventListener()
(或等效的库函数,如 jQuery .on()
)。此外,您应该在将节点添加到 DOMload
之前设置侦听器。<script>
最后,如果您希望访问页面范围内的变量(A
在这种情况下),您必须注入执行此操作的代码。(或者您可以切换到 Tampermonkey 并使用unsafeWindow
,但Chrome 27 会导致问题。)
使用类似的东西:
addJS_Node (null, "http://localhost/test/js/load.js", null, fireAfterLoad);
function fireAfterLoad () {
addJS_Node ("console.log (A);");
}
//-- addJS_Node is a standard(ish) function
function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement ('script');
if (runOnLoad) {
scriptNode.addEventListener ("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}
也许:
addJS_Node (null, "http://localhost/test/js/load.js", null, fireAfterLoad);
function fireAfterLoad () {
addJS_Node (null, null, myCodeThatUsesPageJS);
}
function myCodeThatUsesPageJS () {
console.log (A);
//--- PLUS WHATEVER, HERE.
}
... ...