我想知道是否有可能在javascript中替换单词的所有实例。比方说,我想用fn替换“function”的所有实例。我知道这样做会使我的函数无用,但这只是举个例子。
所以我的麻烦是, 1。如何在脚本中访问文本?脚本遍历,类似于我们如何遍历节点树。
2. 我认为这样的行为会带来安全风险,是吗?
假设您有这样的脚本:
var x = function () {
function y () {
// ...
}
}
答案 0 :(得分:1)
您可以使用eval
看看这个:
myScript = "myFunc = function foo() {console.log(9999)}";
eval(myScript);
现在您可以通过myFunc()
这里很有意思。
将foo
中的名称myScript
更改为bar
,将号码更改为0000
myScript = myScript.replace("foo", "bar");
myScript = myScript.replace("9999", "0000");
eval(myScript);
myFunc();
函数bar
执行并打印0000
还有很多其他方法可以做到这一点。例如,你可以使用JQuery getScript,并且在这个方向上有很大的创造性。
更新
进一步回答......
我想使用变量myFunc
要理解,请运行以下代码段
myScript = "function foo() {console.log(9999)}";
eval(myScript);
myScript = "function bar() {console.log(0000)}";
eval(myScript);
foo();
bar();
现在猜猜我使用myFunc
答案 1 :(得分:0)
您可以像访问任何其他元素一样访问script
元素。但是,它只包含一个文本节点,即脚本本身。
您可以在文本节点上执行替换,如下所示:
var x = function () {
console.log('I still work!');
function y () {
// ...
}
}
var script= document.getElementsByTagName('script')[0];
script.textContent= script.textContent.replace(/function/g, 'fn');
document.querySelector('pre').textContent= script.textContent.trim();
x(); //I still work!
<pre></pre>
请注意,更改文本注释 not 必然会影响脚本的功能。