在脚本内部循环一个单词并对其进行更改
Looping through a word inside a script itself and changing it
我想知道是否可以替换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>
请注意,更改文本注释不一定会影响脚本的功能。
相关文章:
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 如何创建一个“;表单弹出框“;在chrome中右键单击时位于突出显示的单词上方
- 从输入值中删除最后一个单词
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 当两个单独的单词被放在目标上时,使用Jquery获取一个值
- 在表单中创建一个黑名单过滤器以避免某些单词
- 如何查找一个单词在动态创建的html表行中出现的次数
- Regex或javascript每X个连续单词中有一个单词
- Javascript:当这个单词被点击5次时,下面会显示另一个单词
- Javascript/jQuery替换tamil语言输入框中的最后一个单词
- AJAX数据包含一个或多个单词.
- 如何使用d3.layout.cloud.js创建一个包含单词及其权重的csv的单词云
- Javascript-在一个数组中搜索整个单词,并创建一个符合条件的新数组
- Javascript(如果var包含一个单词,则仅更改该单词的颜色)
- 为什么javascript函数名称custom是一个小写的单词,后跟一个大写的单词,就像'orangeCost'一样
- 使用Javascript双击HTML中的空格时,选择上一个和下一个单词
- 检查字符串是否等于一个单词和一个数字
- 有没有一个网站可以生成所有可能的显示单词的方式
- Regex:使用javascript测试最后一个单词后的url中是否存在最后一个斜杠