Javascript 导致所有 HTML 被字符​​串替换

Javascript causing all HTML to be replaced by string

(我对 JS 比较陌生,因此您可能会看到我犯的愚蠢错误。谢谢。)

我不确定为什么会发生这种情况,尤其是当我根本没有告诉页面添加或删除任何元素时。但基本上,当我 运行 某些脚本时,除了我在代码某处使用的随机值外,整个屏幕都变成空白。

一个适用于任何地方的示例是调用 prompt() 而不将结果保存为变量(或者只是 运行 类似于 javascript:"string")。现在这是部分可以理解的;该页面不知道如何处理返回值,所以它只是显示它。随便。

但是,运行此脚本会发生同样的事情(这确实是 Quizlet 的原始 Scatter hack)。 运行ning 后,它会逐一检查所有 Scatter 项,用 HTML 内容提醒用户,并更改方框的位置。但是,在关闭最后一个警报后,整个屏幕变白并在屏幕左上角显示“300px”。注释掉第 5 行 (// x[i].style.left = "300px";) 只会让它显示“600px”。

这似乎是一个足够简单的脚本...这是怎么回事?

var x = document.getElementsByClassName("scatterTermSide lang-en TermText");
for (i = 0; i < x.length; i++) {
    alert("Found item \"" + x[i].innerHTML + "\".");
    x[i].style.left = "600px";
    x[i].style.top = "300px";
}

最终我将扩展它,以便它移动非英语图块和您用鼠标悬停的图块(是的,它们会在您悬停后永久更改 class 名称),但在我解决这个问题之前,这不会发生。
我 运行 正在使用的 Scatter 游戏可以在 here.

上找到

您所描述的听起来像是语法错误。根据您编写的代码,您得到的结果实际上是不可能的。对我来说,这是一个危险信号,表示代码中某处缺少 } 或类似问题。我建议注释掉代码块,直到您可以解决问题为止。您在此处发布的代码没有任何问题,在 fiddle.

中运行良好

确保您的小书签已正确进行 uri 编码。使用 http://mrcoles.com/bookmarklet/ 之类的工具来确保它是。当我这样做时,您的代码在提供的 Scatter Quiz 上运行良好。

最终产品是这样的:

javascript:(function()%7Bvar%20x%20%3D%20document.getElementsByClassName(%22scatterTermSide%20lang-en%20TermText%22)%3B%20for%20(i%20%3D%200%3B%20i%20%3C%20x.length%3B%20i%2B%2B)%20%7B%20alert(%22Found%20item%20%5C%22%22%20%2B%20x%5Bi%5D.innerHTML%20%2B%20%22%5C%22.%22)%3B%20x%5Bi%5D.style.left%20%3D%20%22600px%22%3B%20x%5Bi%5D.style.top%20%3D%20%22300px%22%3B%20%7D%7D)()