5 javascript address-bar google-chrome
我想在 google chrome 的地址栏中执行 JavaScript 代码javascript:。它可以很好地处理一些简单的事情,例如:
javascript:alert("aaa");\nRun Code Online (Sandbox Code Playgroud)\n\n但它不适用于多个警报。我发现将所有内容放在括号中即可解决问题:
\n\njavascript:{alert("aaa"); alert("blabla"); document.getElementsById("myId").innerHTML = "aa";}\nRun Code Online (Sandbox Code Playgroud)\n\n但它不适用于更复杂的事情,例如for调用函数。for我真的需要像这样执行:
var elements = document.getElementsByTagName(\'div\');\n\nfor (var i = 0; i < elements.length; i++) {\n elements[i].innerHTML = "foo";\n}\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试了两者javascript:,javascript:{但}没有成功。
所以我的问题是:如何执行更复杂的 JavaScript 代码,例如上面的代码?
\n您的代码不起作用的原因是它具有有效的返回值。因此,当您运行诸如 之类的语句时elements[i].innerHTML = "foo",它会返回值foo。所以浏览器确实更新了 DOM,但它也需要显示语句的结果。结果,整个页面立即被返回值替换。
void(0)按照 @Djordje 的答案中建议的方式放置 a 的解决方案仅有效,因为void(0)的返回值为undefined。因此浏览器不再需要显示该值,您可以看到更新后的 DOM。
在我注意到答案之前,我尝试运行以下代码。这也有效,因为它的返回值也是undefined.
{
var elements = document.getElementsByTagName('div');
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = "foo";
}
undefined;
}
Run Code Online (Sandbox Code Playgroud)
为了更好地看到这种效果,您可以在 DOM 更新后添加一条警报语句,然后返回一个有效值。像这样:
{
var elements = document.getElementsByTagName('div');
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = "foo";
}
alert("The DOM update statements have executed.");
"You can see that now the DOM is replaced entirely.";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5882 次 |
| 最近记录: |