Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在浏览器控制台中运行JavaScript与bookmarklet_Javascript_Google Chrome Devtools_Bookmarklet_Developer Tools - Fatal编程技术网

在浏览器控制台中运行JavaScript与bookmarklet

在浏览器控制台中运行JavaScript与bookmarklet,javascript,google-chrome-devtools,bookmarklet,developer-tools,Javascript,Google Chrome Devtools,Bookmarklet,Developer Tools,我尝试运行一个简单的代码来替换JS中HTML页面主体中的字符串 document.body.innerHTML = document.body.innerHTML.replace(/foo/g,"bar"); 上面的代码在浏览器控制台中运行良好(在Firefox和Chrome中进行了测试),但当我通过前缀为JavaScript:的JavaScript bookmarklet运行相同的代码时,页面会断开,失去所有样式元素 我只是好奇为什么代码的行为会有所不同,因为我认为在控制台或通过bookma

我尝试运行一个简单的代码来替换JS中HTML页面主体中的字符串

document.body.innerHTML = document.body.innerHTML.replace(/foo/g,"bar");
上面的代码在浏览器控制台中运行良好(在Firefox和Chrome中进行了测试),但当我通过前缀为
JavaScript:
的JavaScript bookmarklet运行相同的代码时,页面会断开,失去所有样式元素


我只是好奇为什么代码的行为会有所不同,因为我认为在控制台或通过bookmarklet运行的JS代码将在同一环境中运行。

实现这一点的最简单方法是在位置栏中键入
javascript:“Hello world”
。请注意,页面内容已被替换,即使您没有触摸DOM

这是因为bookmarklet的返回值被传递给页面内容(如果存在)。在本例中,
(document.body.innerHTML=document.body.innerHTML.replace(/foo/g,“bar”)
计算为新的
innerHTML
1。它只是文档主体的
innerHTML
,因此在替换整个文档HTML时stle信息会丢失

这样做要好得多:

javascript: ( function(){document.body.innerHTML = document.body.innerHTML.replace(/foo/g,"bar") }()
它还有一个额外的好处,那就是将所有的
var
s私有化。或者你可以加上一个
返回false
按@diegog的建议添加到bookmarklet


一,。不是
未定义的
,在Javascript中,相等运算符也会返回值,这让那些键入错误的人非常恼火

如果分配的返回值正在替换页面内容,则会发生什么情况。您可以在末尾添加“returnfalse”来避免它。