我正在寻找重新工作并简化我支持的应用程序中的错误处理.我们目前所有的页面都是从我们创建的基类继承而来,而这显然继承自System.Web.UI.Page.在这个基类中,当前正在重写OnError方法,然后调用MyBase.OnError,然后调用我们的一个自定义日志记录方法.
我没有看到覆盖OnError方法的任何好处,我认为最好让Global.asax中的Application_Error方法处理未处理的异常(记录它),然后配置中的customErrors部分会触发重定向用户的过程.
在网上看起来人们看起来很频繁地覆盖这种方法,但我认为没有必要和MSDN上的这篇文章让我思考一样.
try/catch无法处理异步函数中的错误。
当然,如果我try/catch在每个异步函数中编写代码,也可以处理,但这是不现实的。
window.onerror可以处理异步函数中的错误。
但是window.onerror捕获窗口中的所有错误。
我只希望仅在窗口中的javascript应用程序(例如游戏)的异步(以及同步)函数中处理所有错误。
而且,如果仅在javascript应用程序中发生错误,我想显示一条错误消息并停止该应用程序。
我不想为应用程序中的错误做任何事情。
我有一个网站从Google Web Fonts加载CSS和字体.但是,将使用该站点的一个地方是本地Intranet,无法访问Internet.
我仍然希望使用Google提供的字体来获取Google提供的好处,例如从CDN下载的字体,以及可能已经在用户的计算机上缓存访问使用它们的其他网站.
我还使用Google托管的jQuery,如果Google无法访问,我使用以下代码(来自HTML5 Boilerplate)从我的服务器加载jQuery:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.0.min.js"><\/script>')</script>
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来为CSS文件做同样的事情.
我<img src="..." onerror="..." />过去曾用它来处理没有加载的图像,所以我想知道我是否可以将它用于不加载的样式表.我在几个浏览器中进行了快速测试,使用了<link href="..." onerror="..." rel="stylesheet" type="text/css" />,并onerror在所有浏览器 中执行了,但我想知道我是否可以期望这在所有浏览器中都能保持一致. 或者有更好的方法吗?
我在这里看到了其他几个讨论document.styleSheets收集的答案,但这听起来更像是一个黑客而不是这个.
注意:这实际上更像是"这是否实用,人们是否使用它" - 问题而不是"规范对此有什么说法" - 问题.
背景
几年前,onerror处理程序和交叉原始脚本标签存在问题,有关此问题的更多信息.
主流浏览器解决了这个问题
实际问题
我在localhost上托管一个简单的页面,包括来自不同域的脚本(例如"sitea"),这是HTML的样子:
<html>
<head>
<script>window.onerror = function(e, f, g) { console.log('err',e,f,g) }</script>
</head>
<body><h2>test</h2>
<script src='http://siteA:8081/one.js' crossorigin='anonymous'></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
脚本siteA执行此操作:
var foo; foo.bar;
Run Code Online (Sandbox Code Playgroud)
显然,因为bar未定义,所以会抛出.
不幸的是,我仍然在第0行处理"脚本错误",如门票中所述.
请注意,我是:
设置crossdomain属性.
在请求中查看"Origin"标头
将Access-Control-Allow-Origin标头设置为"*"并在开发Web工具上查看它.
我在firefox和chrome上都尝试了它,它不起作用.任何人都知道为什么?
我正在尝试构建一个播放视频列表的应用.它是基于API样本的非常基本的实现.
使用player.loadVideos方法加载播放列表(video_ids数组).使用实现来跟踪玩家状态的变化PlayerStateChangeListener.
一切都很好,视频背靠背(如预期的那样).
当播放视频时出现错误(例如YouTubePlayer.ErrorReason.NOT_PLAYABLE)时,会以onError方法的形式捕获PlayerStateChangeListener,我player.next()会在那里调用以继续播放下一个视频.
但是,player.next在出现错误后不起作用 - 基本上一旦出现错误,我就无法跳过该视频并播放在播放列表中排队的下一个视频.
我是javascript的新手.有时错误会出现在程序中,但经过多次查看之后,错误仍然没有解决.尽管错误太小而无法进入视线.所以要远离这个,我应该使用事件onError或尝试捕获块.这将是这样做的好习惯.
或者是否有另一种方法可以在更短的时间内找出程序中的错误或错误..
请告诉我..
我有一个附加到 window.onerror 的函数
window.onerror = function(errorMsg, url, line) {
window.alert('asdf');
};";
Run Code Online (Sandbox Code Playgroud)
这在 firefox、chrome 和 IE 中工作正常,但在 safari 中不起作用。通过一些挖掘,我在某处读到 safari 不支持 onerror。然而,这个帖子已经有几年了。safari 目前支持 onerror 吗?
如果没有,是否有解决方法?
这就是我的意思。
如果浏览器本机支持fetch api(例如,Chrome),则它使用本机浏览器Promise。
如果我使用另一个 Promise 库(例如bluebird), nativefetch仍然没有使用它——而是使用 nativePromise实现。
有没有办法覆盖它?
问题示例:
window.Promise = function () { return null; };
fetch('/api')
.then(function (res) {
console.log('fetch result!', res); // still works because it uses native Promise
});
Run Code Online (Sandbox Code Playgroud)
为什么我需要那个,你可能想知道?我希望利用全球排斥事件,其bluebird库支持和原生的承诺不具备的。
哪种情况会导致调用此处理程序?我找不到此方法引发错误的任何实例。
我尝试离线使用设备,xmlHttpRequest.status = 0但没有出现错误。
问题是我可以创建哪种情况来测试此处理程序的功能。
var xmlhttp = new XMLHttpRequest(),
method = 'GET',
url = 'https://developer.mozilla.org/';
xmlhttp.open(method, url, true);
xmlhttp.onerror = function () {
console.log("** An error occurred during the transaction");
};
xmlhttp.send();
Run Code Online (Sandbox Code Playgroud)
来自:https : //developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequestEventTarget/onerror
我收到“脚本错误”。在 window.onerror 中捕获错误时,即使在 S3 上正确(我认为)配置了 CORS 标头。
CORS 配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
HTML:
<script crossorigin src="https://s3.amazonaws.com/safari-script-error/foo.js" />
Run Code Online (Sandbox Code Playgroud)
其中包含:
window.addEventListener("keydown", function(event) {
if (event.keyCode === 69) { // "e" button
throw new Error("Oh shoot");
}
});
Run Code Online (Sandbox Code Playgroud)
JS:
window.onerror = function(event) {
console.log(event);
}
Run Code Online (Sandbox Code Playgroud)
代码笔:https ://codepen.io/astashov/pen/yoEvRB
它在 Chrome、Firefox 和 IE11 中运行良好,并且只显示“脚本错误”。在 Safari 中(我有版本 10.0.3 (12602.4.8))。
如何让它也能在 Safari 中工作?