JavaScript 警报在 Firefox 6 中不起作用

Posted

技术标签:

【中文标题】JavaScript 警报在 Firefox 6 中不起作用【英文标题】:JavaScript alert not working in Firefox 6 【发布时间】:2011-10-02 08:56:59 【问题描述】:

我尝试在 Firefox 6 的地址栏中运行这段 javascript 代码:

javascript:alert("Hello")

我得到一个

ReferenceError: 未定义警报。

虽然它曾经在 Firefox 5 中运行良好,但仍然适用于 Opera、Safari 和 Chrome。我该如何解决?

【问题讨论】:

@Ryan:完全按照你对我的回答所做的:接受对你帮助最大的答案。您应该回到以前的问题并这样做。 【参考方案1】:

目前似乎不允许使用javascript:data: URL(直接在地址栏中)as per this comment:

仅供参考,我可能会将此错误拆分为多个短期和长期修复。

短期:禁止将 javascript: URL 粘贴到 URL 栏中 长期:另外要求书签在 在运行 JavaScript 之前的书签管理器

而this is the "bug" 已在latest version 中解决。 last comment 还声明:

javascript: 实际上并没有被忽略——它们是运行的,但是在一个“空”的上下文中,没有任何你期望的常用 DOM 方法,所以最常见的用途(例如 javascript:alert(1))只是抛出(因此被有效地忽略)。不过,javascript:1+1 可以正常工作。

现在:

我该如何解决这个问题?

你不能,你必须等到他们决定一个合适的解决方案。正如评论所说,书签可以工作,但必须明确允许。如果您只想测试代码,请使用Firebug 或新的Scratchpad 功能。

【讨论】:

两个人在 25 秒内引用了相同的错误报告。 :D 我已经删除了我的答案,因为这更详细。 这个“错误修复”刚刚毁掉了我正在进行的两个月的项目。 :( 我必须同意 80% 的 cmets 关于该错误。这是解决问题的最愚蠢的解决方案。让我们也禁用浏览器上的 javascript。这将使世界更加安全。更好的是,让我们禁止用户访问页面。这应该可以解决互联网上所有的仇恨言论!【参考方案2】:

Felix 的回答正确地说明了为什么 URL 栏中的 javascript: 不再起作用。

替换,如果您尝试调试您的网页,是 Web 控制台(不要与错误控制台混淆)。在紧凑菜单中,它位于 Web Developer 下;在完整的菜单栏中,它位于工具下。或者您可以按 ctrl-shift-K(在 Mac 上为 cmd-shift-K)。带有大于号的栏是​​ JavaScript 提示;在那里输入的代码将在当前页面的上下文中进行评估。可以单击该栏上方带下划线的区域中的任何内容以显示检查器窗口。

【讨论】:

** 在 Mac 上使用 command+alt+K。悲伤的一天,我会想念在地址栏中输入 javascript...【参考方案3】:

如果您的可点击小书签坏了,而您又想找回它,您可以创建一个可点击按钮,而不是使用Custom Buttons Firefox 扩展。

按钮相对于 Scratchpad 运行的优势:

您实际上可以保存小书签(按钮), 您可以拥有一个自己的漂亮图标(创建一些图像,例如 PNG 文件,将其导入并在新按钮对话框中对其进行 base64_encode)。

这个扩展有点特别,因为按钮运行在 Firefox chrome 级别,所以它们有更多特权(您可以与浏览器的 API 交互),并且没有一对一1 普通 JS 和按钮代码之间的对应关系(需要一些调整)。更准确地说,从按钮中看到的documentwindow 并不是您所期望的。

但是,您可以将“好”windowdocument 分配给您的变量,然后改为处理这些变量(最好不要重新定义窗口;)

这是我编写的在 Fx10 中运行良好的示例代码:

// get proper 'window' and 'document' into our private variables
var theWindow = window.top.getBrowser().selectedBrowser.contentWindow;
var theDocument = theWindow.document;

// here we go
var input = theDocument.getElementById("foo");
input.focus(); // just to show you it's working, unnecessary in fact

// simulate keyboard event
var evt = theDocument.createEvent("KeyboardEvent");
evt.initKeyEvent ("keypress", true, true, theWindow ,
            0, 0, 0, 0, 0, 65); // 65 == "A"
input.dispatchEvent(evt);

// show alert after 2 sec
theWindow.setTimeout( function()
  input.value += "B";
  theWindow.alert(input.value); // alerts "AB"
,2000);

不要直接使用全局函数(如setTimeout,或alert),您必须在它们前面加上theWindow.,并将document/window替换为本地theDocument/theWindow和它似乎正在工作。我还没有对它进行彻底的测试,但是对于非常复杂的情况。

要添加按钮,右键单击您已有的任何按钮,然后选择“添加新按钮...”。

【讨论】:

以上是关于JavaScript 警报在 Firefox 6 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当用户尝试按下后退按钮或使用 Firefox 时,如何添加警报? (Javascript)

警报显示在 Chrome 和资源管理器中,但不显示在 Firefox 中

无法使用 java 在 firefox 上的 selenium webdriver 中处理警报

在 Mozilla Firefox 中禁用记住密码警报

即使使用了 e.preventdefault(),在显示警报窗口后退格在 Firefox 中工作

如何使用 Javascript 通过 selenium 3.6.0 使用另一个配置文件打开 Firefox 浏览器