gpt4 book ai didi

javascript - 插入并执行javascript

转载 作者:搜寻专家 更新时间:2023-10-31 23:11:36 25 4
gpt4 key购买 nike

我有一个 javascript 变量:

var foo='<script type="text/javascript">alert("Hello World");<\/script>'  

变量被插入 element.innerHTML=foo;页面上发生事件后,页面加载后约 10 秒。

有没有办法在插入后立即执行'alert'功能?

最佳答案

如果您绝对肯定必须获取字符串中的 JavaScript 代码并执行它,您基本上必须使用 eval 或类似 eval 的机制。在多年的 JavaScript 编程中,我从未不得不求助于它,我确实建议您看看是否有其他方法可以实现您的实际总体目标。

所以在这里,您将剥离脚本标签内容,只对代码进行eval,例如:

var script = foo.replace(/^<script[^>]*>/, "").replace(/<\/script>$/, "");
eval(script);
// Or window.evalInGlobalScope(script); // -- See below

显然,您必须确保您信任字符串的来源,因为您正在执行其中的代码。

eval 是一个狡猾的野兽,会根据上下文和范围玩非常奇怪的游戏。如果你需要的东西看起来更像你在页面上添加脚本标签时得到的东西,这里有一个跨浏览器的函数(从 my answer 到 Stack Overflow 上的另一个问题):

window.evalInGlobalScope = (function() {
var fname, scr;

// Get a unique function name
do {
fname = "__eval_in_global_test_" + Math.floor(Math.random() * 100000);
}
while (typeof window[fname] !== 'undefined');

// Create test script
scr = "function " + fname + "() { }";

// Return the first function that works:
return test(evalInGlobalScope_execScript) ||
test(evalInGlobalScope_windowEval) ||
test(evalInGlobalScope_theHardWay) ||
evalInGlobalScope_fail;

function test(f) {
try {
f(scr);
if (typeof window[fname] === 'function') {
return f;
}
}
catch (e) {
return false;
}
finally {
try { delete window[fname]; } catch (e) { window[fname] = undefined; }
}
}
function evalInGlobalScope_execScript(str) {
window.execScript(str);
}
function evalInGlobalScope_windowEval(str) {
window.eval(str);
}
function evalInGlobalScope_theHardWay(str) {
var parent, script, d = document;

parent = d.body || d.documentElement || d.getElementsByTagName('head')[0];
if (parent) {
script = d.createElement('script');
script.appendChild(d.createTextNode(str));
parent.appendChild(script);
}
}
function evalInGlobalScope_fail() {
throw "evalInGlobalScope: Unable to determine how to do global eval in this environment";
}
})();

Live example using the above

关于javascript - 插入并执行javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com