.onload
ユーザースクリプトから、.onclick
などを使用しないでください。 (これは、通常の Web ページでもよくない方法です)。
その理由は、ユーザー スクリプトがサンドボックス ( 「孤立した世界」 ) で動作し、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.
}
... ...