在 google chrome 地址栏中执行 JavaScript 函数

5 javascript address-bar google-chrome

我想在 google chrome 的地址栏中执行 JavaScript 代码javascript:。它可以很好地处理一些简单的事情,例如:

\n\n
javascript:alert("aaa");\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不适用于多个警报。我发现将所有内容放在括号中即可解决问题:

\n\n
javascript:{alert("aaa"); alert("blabla"); document.getElementsById("myId").innerHTML = "aa";}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不适用于更复杂的事情,例如for调用函数。for我真的需要像这样执行:

\n\n
var elements = document.getElementsByTagName(\'div\');\n\nfor (var i = 0; i < elements.length; i++) {\n    elements[i].innerHTML = "foo";\n}\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试了两者javascript:javascript:{}没有成功。

\n\n

所以我的问题是:如何执行更复杂的 JavaScript 代码,例如上面的代码?

\n

Nis*_*arg 0

您的代码不起作用的原因是它具有有效的返回值。因此,当您运行诸如 之类的语句时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)