Javascript 在脚本中循环一个单词并对其进行更改
我想知道是否有可能在javascript中替换一个单词的所有实例。比如说,我想用fn替换“function”的所有实例。我知道这样做会使我的函数无用,但这只是举个例子 所以我的问题是,1。如何访问脚本本身中的文本?脚本遍历,类似于我们遍历节点树的方式 2.我认为这样的行为会带来安全风险,对吗 假设您有这样一个脚本:Javascript 在脚本中循环一个单词并对其进行更改,javascript,Javascript,我想知道是否有可能在javascript中替换一个单词的所有实例。比如说,我想用fn替换“function”的所有实例。我知道这样做会使我的函数无用,但这只是举个例子 所以我的问题是,1。如何访问脚本本身中的文本?脚本遍历,类似于我们遍历节点树的方式 2.我认为这样的行为会带来安全风险,对吗 假设您有这样一个脚本: var x = function () { function y () { // ... } } 您可以像访问任何其他元素一样访问脚本元素。但是,
var x = function () {
function y () {
// ...
}
}
您可以像访问任何其他元素一样访问
脚本元素。但是,它将只包含一个文本节点,即脚本本身
您可以在文本节点上执行以下替换操作:
var x = function () {
function y () {
// ...
}
}
var x=函数(){
console.log('我还在工作!');
函数y(){
// ...
}
}
var script=document.getElementsByTagName('script')[0];
script.textContent=script.textContent.replace(/function/g,'fn');
document.querySelector('pre').textContent=script.textContent.trim();
x()//我还在工作代码>
您可以使用eval
看看这个:
myScript = myScript.replace("foo", "bar");
myScript = myScript.replace("9999", "0000");
eval(myScript);
myFunc();
现在,您可以通过myFunc()
这里很有趣
将myScript
中的名称foo
更改为bar
,将数字更改为0000
myScript = "function foo() {console.log(9999)}";
eval(myScript);
myScript = "function bar() {console.log(0000)}";
eval(myScript);
foo();
bar();
功能bar
执行并打印0000
myScript = "function foo() {console.log(9999)}";
eval(myScript);
myScript = "function bar() {console.log(0000)}";
eval(myScript);
foo();
bar();
有很多其他方法可以做到这一点。例如,您可以使用JQuery getScript,并在这方面做一些创造性的工作
更新
把答案再进一步
我想使用变量myFunc
要理解,请运行以下代码段
现在猜猜我为什么使用myFunc
为什么会被否决?脚本不可能遍历它自己。我猜您所描述的是缩小
。有工具可以做到这一点,但正如@JonathanBrooks所说的,穿越自我是不可能的。我告诉你我为什么要问这个。我在考虑为像“让”这样的事情制定后备方案。因此,如果let不受支持,那么我将用var替换let的所有实例。这听起来很疯狂,但这正是这类事情可能有用的地方。更改标记中的脚本会改变可执行脚本本身吗?我们必须使用准备好的语句还是PHP中的类似语句?我的意思是什么是安全风险安全风险可能取决于浏览器。在使用我的示例的Chrome中,x()
在我更改文本内容后仍然被定义。您可以使用此方法编写JavaScript解析器,该解析器可以将代码翻译成另一种语言。(虽然这将是一个相当大的工作。)这似乎是缓存的一个问题。不过,必须有一些功能来刷新缓存或重置整个内容而不刷新页面,这样就可以解决这个问题。我知道dom元素的遍历,但是可以遍历外部js文件并在那里更改文本吗?顺便说一下,请阅读下面答案中的一些注释。很好,我是新来的eval,自从我听说它是“代码中的魔鬼”后,我从未真正接触过它,但是嘿,它太棒了。任何安全问题以及如何在您的解决方案中避免这些问题?尽管脚本本身不起作用,因为它是一个字符串。你能解释一下它是如何工作的吗?请参阅“eval”文档。这是一个有效的例子。我避免使用第三方库。我喜欢白手起家地做事。所以,嘿,我收到的第一个答案有一个问题,即当我更改某些内容时,无法保证脚本会自动更新。eval技术也是这样吗?我的意思是浏览器会尽可能地缓存脚本。我会查看文档。当然,这些示例非常有效。我只想知道这样做的利弊,我会接受你的回答:)