如何通过浏览器 (Chrome) 在运行时抛出 javascript 错误?

How to throw a javascript error during runtime via browser (Chrome)?

我的 objective: 测试我的错误处理功能。

临时解决方案:自定义路由:/error,其中包含故意产生致命错误的代码。

var a = undefined;
a.b.c // Breaks.

以上内容有效,但我无法使用它来测试生产站点,因为该页面不是必需的。 我正在寻找一种通过浏览器对其进行测试的方法。我尝试简单地添加“ throw new Error("Custom error thrown here") 到控制台。这实际上并没有在运行时破坏它。

我尝试添加一个断点并添加相同的代码:throw new Error("Custom error thrown here")。那也没用。

除了上述方法之外,还有其他更简单的方法吗?

我一直在寻找一种可以仅通过浏览器进行操作的方法。

谢谢。

我会使用 exec 函数,它实际上接受字符串并在编译时运行其中的代码。

exec('a.b.c')

您将无法从控制台在应用程序内部抛出错误,因为您超出了应用程序的范围。

话虽如此,但您可以通过在 javascript 文件的开头添加一个断点来执行此操作,这有点尴尬。

重新加载页面,您的应用程序将在断点处暂停 - 然后您可以根据需要修改代码 - 例如添加 throw new Error("something...") - 并保存您的编辑。

然后允许代码 运行,您将看到您的错误。

一个缺点是,如果您重新加载更改将会消失,但我相信它是您在 运行 时间修改代码的最接近时间。

如果我答对了你的问题,这就是你如何从控制台做到这一点:

var script_tag = document.createElement('script');
script_tag.type = 'text/javascript';
script_tag.text = 'throw new Error("Custom error thrown here")';
document.body.appendChild(script_tag);

或者,如果您愿意,可以在点击时触发它:

var script_tag = document.createElement('script');
script_tag.type = 'text/javascript';
script_tag.text = 'window.document.onclick = function() { throw new Error("Custom error thrown here")}';
document.body.appendChild(script_tag);

然后你点击页面上的任意位置,抛出错误;

您可以使用可从您的应用程序和调试控制台访问的全局变量。

if (window.shouldThrow) {
    throw new Error("Custom error thrown here");
}

通过这种方式,您可以使用 window.shouldThrow 变量来 on/off 异常抛出。

将此代码添加到您的生产代码中

window.addEventListener('err', () => {
  throw new Error('break it');
})

当您想简单地创建一个错误时

dispatchEvent(new Event('err'))

在控制台中

你没有明确提到应该如何以及在哪里抛出错误。我假设您可以使用 JavaScript 文件的修改副本来抛出错误。修改后的文件将驻留在您的计算机上,并且仅在您使用 Chrome 开发人员工具时使用。此功能称为 Local Overrides。步骤如下:

  • 打开网页
  • 打开该网页的 Chrome 开发人员工具
  • Sources 面板中转到 Overrides 选项卡
  • 单击 Select folder for overrides 并在您的计算机上选择一个文件夹
    • 网页上出现一条警告,内容为“DevTools 请求完全访问...”,您必须允许
  • Sources 面板中转到 Page 选项卡
  • 找到您需要注入“抛出错误”代码的文件
  • 右键单击并选择 Save for overrides

现在您可以在计算机上或在开发人员工具中编辑文件副本。在所需位置插入产生错误的代码。当您在打开开发者工具的情况下重新加载页面时,Chrome 将加载 JavaScript 文件的本地副本并抛出错误。以这种方式抛出的错误将包含它起源的上下文,例如调用堆栈。如果开发人员工具关闭,则将使用 Live Copy。

在 运行 时间

尝试使用这种方式捕获错误详细信息

try 
{
   var a = undefined;
   a.b.c // Breaks.
} 
catch ( e )
{
   alert("Error: " + e.description );
}