在脚本内部循环一个单词并对其进行更改

Looping through a word inside a script itself and changing it

本文关键字:单词 一个 循环 内部 脚本      更新时间:2023-09-26

我想知道是否可以替换javascript中单词的所有实例。例如,我想用fn替换"function"的所有实例。我知道这样做会使我的函数变得无用,但这只是一个例子。

所以我的问题是,1。如何访问脚本本身中的文本?脚本遍历,类似于我们遍历节点树的方式。

2.我认为这样的行为会带来安全风险,是吗?

假设你有一个这样的脚本:

var x = function () {
    function y () {
       // ...
    }
}

您可以使用eval

看看这个:

myScript = "myFunc = function foo() {console.log(9999)}";
eval(myScript);

现在您可以通过myFunc() 运行该功能

这里很有趣。

myScript中的名称foo更改为bar,将编号更改为0000

myScript = myScript.replace("foo", "bar");
myScript = myScript.replace("9999", "0000");
eval(myScript);
myFunc();

功能bar执行并打印0000

还有很多其他方法可以做到这一点。例如,您可以使用JQuerygetScript,并在这个方向上发挥一些创造性。


更新

进一步分析答案。。。

我之所以想使用变量myFunc ,有一个具体的原因

要理解,请运行以下代码段

myScript = "function foo() {console.log(9999)}";
eval(myScript);
myScript = "function bar() {console.log(0000)}";
eval(myScript);
foo();
bar();

现在猜猜我使用myFunc 的原因

您可以像访问任何其他元素一样访问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>

请注意,更改文本注释不一定会影响脚本的功能。

相关文章: