Chrome では、location.assign
呼び出し後に遅延が発生するため (別のスレッドで実行される場合があります) 、呼び出しtutu
時に var が定義されずalert()
、コード全体が例外をスローします。(また、トリニティが言ったように、alert
ニーズの前に を付ける必要がありますjavascript:
。)
次のようにタイマーを使用できます。
location.assign("javascript:var tutu = 'oscar';");
setTimeout (
function () {location.assign("javascript:console.log('1:' + tutu);"); }
, 666
);
しかし、それが厄介な点であることに同意していただけると思います。
でページ スコープの JavaScript を実行しようとするとlocation.assign
、最も短い/最も単純なコードを除いて、すべてが面倒になります。
スクリプト インジェクションを使用して、多くのページ スコープの JavaScript を設定、リセット、および/または実行します。
function setPageScopeGlobals () {
window.tutu = 'Oscar';
window.globVar2 = 'Wilde';
window.globVar3 = 'Boyo';
alert ('1:' + tutu);
window.useGlobalVar = function () {
console.log ("globVar2: ", globVar2);
};
}
//-- Set globals
addJS_Node (null, null, setPageScopeGlobals);
//-- Call a global function
addJS_Node ("useGlobalVar();");
//-- Standard-ish utility 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);
}