获取页面上所有 javascript 错误/javascript 错误处理

2023-12-29

我希望能够向自己发送页面上的所有 javascript 错误。我是一名扩展开发人员,因此以下内容重点强调在调用 dom 之前确保 dom 已准备好。

我研究了添加一些功能throw还可以发送或邮寄例外情况,但我发现这是不可能的。

1:主要解决这个问题,awindow.onerror 处理程序:

window.onerror = function(e, url, line){
  mailError('onerror: ' + e + ' URL:' + url + ' Line:' + line);
  console.error('\nLine ' + line + ':');
  setTimeout(function(){retry();}, 100); //mainly useful in content scripts for extensions, 
  return true; 
}

可能还需要通过 jQuery 做同样的事情:

$(window).error( 
  function(e, url, line){
    //handle error
  }
);

这样做的缺点是您的代码已停止执行。

为了避免错误停止执行,最好使用回调来确保代码按特定顺序执行,并尽可能利用事件。您还可以使用一些技术来保护 dom 调用

$(document).ready({
  //you usually won't get bad dom calls wrapping your code in this
});

您还可以考虑在 window.onload 上运行代码

window.onload = function(){
  //you page will probably twitch upon executing code at this time
  //but you will almost never have a bad dom call
};

另一种技术

if (document.getElementById('iNeedThisElement')) {
  //doin work!
  document.getElementById('iNeedThisElement').style.display = 'block';
} else {
  var stillNeedToTakeCareOfX = true; //false otherwise since it's undefined
  mailError('iNeedThisElement was unavailable...');
}

使用这些技术并调试您的应用程序,您应该会相当顺利。由于无法检索 console.error、.warn 和 .log 语句并将其报告给您,因此下面提供了一个小型替代套件:

var Xe = { }; //Extreme error suite

function extraInfo(e){
   //e optional
   if(!e)e = true;

   //add an extra debug info, such as navigator or current URL
   return ' currentURL: '+ document.URL + 
        '\n userAgent: ' + navigator.userAgent + 
        '\n platform: '  + navigator.platform + 
        '\n userid: '    + localStorage.userid + 
        '\n language: '  + navigator.langauge + 
        '\n cookies?: '  + navigator.cookiesEnabled;
}

Xe.error = function(e){
  console.error(e); //maintain original functionality
  mailError('Xe err: ' + e + extraInfo() );
}


Xe.warn = function(e){
  console.warn(e);
  mailError('Xe warn: ' + e + extraInfo() );
}


Xe.log = function(e){
  console.log(e);
  mailError('Xe log: ' + e + extraInfo() );
}

作为最后的手段,您可以不断尝试执行一段代码,直到它执行时没有错误为止。这是下面的“2”。

2:将代码分组为大块,并在捕获错误后尝试在 x 秒后重新执行,或继续执行下一个代码块

//defExe = DEFinitely EXEcute this code
  //functionArg, reference to a function holding a large chunk of code
  //seconds, timeout in milliseconds to re-attempt error free execution of this function
function defExe(functionArg, seconds) {
  //seconds is optional
  if (!seconds)seconds = 300;

  try {
    functionArg();
  } catch(e) {
    //mail the error plus extra info
    mailError('caught ' + e + ' attempting to re-execute ' + functionArg.name + ' in ' + seconds + ' milliseconds');

    //re-attempt to execute this code
    setTimeout(function(){ 
       defExe(functionArg, seconds); 
    }, seconds);
  }
}

然后使用它

//array to group function chunks
var fn = [ ];

fn[1] = function (){
  //a large chunk of javascript
}
defExe(fn[1]);

fn[2] = function(){
  //another chunk of your program
}
defExe(fn[2]);

#2 摘要:将代码分组到函数中并在 try-catch 块中运行,如果捕获到错误则重复


我有我的window.onerror,它不会停止我的javascript:

window.onerror = function(error, url, line) {
    controller.sendLog({acc:'error', data:'ERR:'+error+' URL:'+url+' L:'+line});
};

请注意,controller.sendLog 是一个将此数据发送到日志记录 php 的函数。

可能是因为你在该函数中导致了一些 javascript 错误?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取页面上所有 javascript 错误/javascript 错误处理 的相关文章

  • 将 OoXml 插入单词抛出错误:未知

    我一直在尝试通过office js将OOXML插入到word文档的正文内容中insertOoXML 方法 我什至尝试过最简单的实现 认为我在尝试替换 XML 本身中的 fieldCodes 时做了一些不正确的事情 所有结果都是这样Error
  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • 如何应对500万用户? ASP.NET 身份

    我正在运行一个 ASP NET mvc5 应用程序 目前有 500 万用户 它托管在 Azure 云中 对于身份验证 我使用 EntityFramework 的 Asp Net Identity 但是 用户越多 注册功能就越慢 我尝试缩放数
  • Netlogo:运行时创建小世界网络

    我正在尝试生成一个小世界类型的网络 https en wikipedia org wiki Small world network https en wikipedia org wiki Small world network 在我创建的
  • Mongodb 读取首选项

    SETUP 我有 mongodb 的一个主实例和两个辅助实例 两个辅助实例之一托管在与我的 Web 应用程序相同的区域中 我正在使用 pymongo 进行连接 QUERY 如何以较低的延迟连接到辅助设备 目前我正在这样做 from pymo
  • 如何使用 jquery 动态地将新项目添加到此表单内的下拉列表中?

    document ready function var element form element on mousedown function event element
  • Javascript:仅读取大型服务器文本文件的最后 x 行数

    今天我正在处理非常大的日志文件 我想通过 RPi 上的 lighttpd 显示它们 但它们每天都在变大 因此很快将需要很长时间来加载 为了防止这个问题 我想我可以有一个按钮来读取 比如说这个日志文件的最后 500 行 当然我对javascr
  • 如何在 Windows 10 上弹出 USB 驱动器(IOCTL_STORAGE_EJECT_MEDIA 不再足够)

    在 Windows 上弹出 USB 驱动器的惯例是按以下顺序进行 CreateFile drive letter with read write rights file share read and write DeviceIoContro
  • Eclipse 风格工具提示库?

    Does anyone know of an open source swing tooltip library that works like eclipse s tooltips Specifically the functionali
  • 在 WinForms 中,UI 中是否可以有多个线程?

    我想答案是否定的 我在 stackoverflow 上检查了类似的问题 但它们似乎根据特定解决方案的需要走了不同的方向 但可能错过了一些东西 WinForms 应用程序中是否可以有多个 UI 线程 我正在重构并想知道是否应该使用 Concu
  • 仅 WPF TabItem 标题样式

    我正在编写一个 WPF 应用程序 并尝试设置 TabItem 标头的样式 仅在选择时显示背景颜色更改的边框 问题是 当我添加该样式时 它会弄乱 TabItem 中 TextBlock 项目的样式 我不是 WPF XAML 专家 下面是我在
  • 动态创建div时如何显示/隐藏div

    我正在开发评论系统 对评论进行两级重播 我在如何显示和隐藏 div 方面遇到问题 因为它的 id 不同 我尝试了以下方法
  • 构建定义——只有空队列

    如果我正在创建构建定义 则无法选择默认代理队列 不久前 我可以创建包含默认队列的构建定义 我不知道改变是什么 它不再起作用了 如果我去编辑正确创建的构建定义 然后再次尝试创建定义 我可以选择默认队列 这是什么原因呢 在创建之前编辑现有的构建
  • 正则表达式验证 UTC 日期时间格式

    我想验证日期时间格式 例如 2014 08 29T06 44 03Z 为此我正在寻找一个reg ex 尝试了几种组合 但这些对我不起作用 试试这个正则表达式 b 0 9 4 0 9 2 0 9 2 T 0 9 2 0 9 2 0 9 2 Z
  • 在 word2vec Gensim 中获取二元组和三元组

    我目前在我的 word2vec 模型中使用 uni gram 如下所示 def review to sentences review tokenizer remove stopwords False Returns a list of se
  • IndexError:索引超出范围:7

    我正在使用名为财务数据质量管理企业版 FDMEE 的 Oracle EPM 产品 我编写了一个 Jython 脚本来解析数据文件并将其推送到 FDMEE 产品架构中的自定义表 当我推送数据文件的子集时 它工作正常 但是当我解析整个数据文件时
  • Git SVN 忽略路径如何工作(忽略每日构建标签)?

    我正在尝试使用 git svn 克隆 svn 存储库 该存储库具有我想忽略的每日构建标记 我正在尝试使用 ignore paths 选项来执行此操作 但我仍然将每日构建标签作为我的存储库中的分支 最近有一个类似的 但到目前为止尚未得到解答
  • 连接一元参数的模板参数包

    虽然说 std add pointer是一元的 以下代码被 GCC 7 0 0 20160608 和 Clang 3 9 0 接受 template
  • 在 Clojure 中测试对象是否为 Java 原始数组

    Clojure 中检测对象是否为 Java 原始数组的最佳方法是什么 我需要这个的原因是对原始数组进行一些特殊处理 这可能看起来像 if byte array object handle byte array object 它是一段对性能相
  • Python 每个模块和包一个类

    我正在尝试用 Python 构建我的应用程序 从 C Java 背景回来后 我喜欢每个文件一个类的方法 我希望我的项目树看起来像这样 Service Database DbClass1 py DbClass2 py Model DbMode
  • 用于保持您的网站被 Google Bing 等索引的 PHP 库

    我需要一些能够对我的网址进行索引和描述的库 所以我想对它说类似的话 用一些关键词索引这个新网址 www bla bla com new url 或类似的东西 我想确定的是 如果我告诉我的库我的新 URL Google 和其他人将 100 尽
  • 获取页面上所有 javascript 错误/javascript 错误处理

    我希望能够向自己发送页面上的所有 javascript 错误 我是一名扩展开发人员 因此以下内容重点强调在调用 dom 之前确保 dom 已准备好 我研究了添加一些功能throw还可以发送或邮寄例外情况 但我发现这是不可能的 1 主要解决这