在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);
}
它的工作原理和它的工作這麼好。我一直在尋找(字面上)日夜。謝謝,非常感謝。 nani gigantum humeris insidentes –
不客氣,樂意效勞。 –