我正在动态地向<script>
页面添加标签<head>
,我希望能够以某种方式判断加载是否失败 - 404,加载脚本中的脚本错误等等.
在Firefox中,这有效:
var script_tag = document.createElement('script');
script_tag.setAttribute('type', 'text/javascript');
script_tag.setAttribute('src', 'http://fail.org/nonexistant.js');
script_tag.onerror = function() { alert("Loading failed!"); }
document.getElementsByTagName('head')[0].appendChild(script_tag);
Run Code Online (Sandbox Code Playgroud)
但是,这在IE或Safari中不起作用.
有没有人知道如何在Firefox以外的浏览器中使用它?
(我不认为需要在.js文件中放置特殊代码的解决方案是一个很好的解决方案.它不够优雅且不灵活.)
有没有办法确定图像路径是否会导致实际图像,即检测到图像无法在Javascript中加载.
对于Web应用程序,我正在解析xml文件并从图像路径列表中动态创建HTML图像.服务器上可能不再存在某些映像路径,因此我希望通过检测哪些映像无法加载并删除该HTML img元素来优雅地失败.
注意JQuery解决方案无法使用(老板不想使用JQuery,是的,我知道不要让我开始).我知道在JQuery中检测图像何时加载的方法,但不知道它是否失败.
我的代码创建img元素,但我如何检测img路径是否导致无法加载图像?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
Run Code Online (Sandbox Code Playgroud) Javascript有这个很棒的回调window.onerror
.跟踪任何错误都非常方便.但是,它调用错误名称,文件名和行.它肯定没有从try...catch
语句中获取实际的错误对象那么丰富.实际的错误对象包含更多的数据,所以我试图得到它.不幸的是,try...catch
当你开始使用异步代码时,语句不能正常工作.
有没有办法结合并获得两全其美?我最初寻找一种方法来获取块中触发的最后一个错误onerror
,但看起来JS不存储它.
任何线索?
我在Rx库中收到IllegalStateException错误,并且不知道问题根源的确切位置,无论是RxJava还是我可能做错了.
证书锁定(发生在所有服务器请求上)但似乎指向会话超时或注销并重新登录时发生致命崩溃.Repro步骤(大约25%的时间发生)如下:登录,打开列表项 - 滚动一路结束 - 注销 - 重新登录 - 打开应用程序 - 关闭应用程序 - >崩溃!
任何人对如何防止这种情况有任何想法?我发现Observer.onError类似的问题在不一致的情况下触发
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:62)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError
at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:201)
at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:159)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4867)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at …
Run Code Online (Sandbox Code Playgroud) 我想在我的网站上添加一个onerror事件.
window.onerror = function() {
alert("an error");
}
Run Code Online (Sandbox Code Playgroud)
但我得到的只是:
notThere();
ReferenceError: notThere is not defined
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
浏览器:Chrome 26.0.1410.64米
重现步骤:
CSS:
.posting-logo-div { }
.posting-logo-img { height:120px; width:120px; }
.posting-photo-div { height:5px;width:5px;position:relative;top:-140px;left:648px; }
.posting-photo-img { height:240px; width:240px; }
Run Code Online (Sandbox Code Playgroud)
HTML:
<div id="image" class="posting-logo-div"><img src="../images/some-logo1.jpg" onerror="this.src='../images/no-logo-120.jpg';" class="posting-logo-img"></div>
<div id="photo" class="posting-photo-div"><img src="../images/some-logo2.jpg" onerror="this.src='../images/no-logo-240.jpg';" class="posting-photo-img"></div>
Run Code Online (Sandbox Code Playgroud)
这在Chrome或Mozilla中似乎不起作用,但在IE中可以使用.
如果找不到源图像,有没有办法显示替代图像?我知道要通过以下方式完成此任务:
<img src="imagenotfound.gif" alt="Image not found" onError="this.src='imagefound.gif';" />
Run Code Online (Sandbox Code Playgroud)
但是,如果你正在做这样的事情怎么样,如果有错误或者如果没有找到图像你怎么能抓住?
<div style="background:url('myimage.gif')"></div>
Run Code Online (Sandbox Code Playgroud) 我熟悉它的典型用法onload
,如下所示:
<body onload="alert('Hello, World!');">
...
</body>
Run Code Online (Sandbox Code Playgroud)
触发加载事件的所有html元素是什么?(从而执行onload属性中提供的javascript)
例如,img
是一个这样的标记,它将在加载onload
时执行属性中提供的javascript some.png
:
<img onload="someImgLoaded()" src="some.png" />
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个javascript错误日志记录基础结构.
我试图设置window.onerror
为我的错误处理程序.它适用于IE 6,但是当我在Firefox中运行它时,它会遇到一些冲突的onerror
方法.
var debug = true;
MySite.Namespace.ErrorLogger.prototype = {
//My error handling function.
//If it's not in debug mode, I should get an alert telling me the error.
//If it is, give a different alert, and let the browser handle the error.
onError: function(msg, url, lineNo) {
alert('onError: ' + msg);
if (!debug) {
alert('not debug mode');
return true;
}
else {
alert(msg);
return false;
}
}
}
//Document ready handler (jQuery shorthand)
$(function() { …
Run Code Online (Sandbox Code Playgroud) 我们使用window.onerror来捕获未处理的异常(为开发团队记录它们,并显示友好的用户警报).最近我们注意到,在谷歌浏览器中,如果错误消息超过一定长度就会被截断,并且文本" ...<omitted>...
"被神秘地添加到错误消息中.
以下代码将演示此功能(在Chrome版本33.0.1750中).我想知道是否有其他人有这个问题?
<html>
<head>
<script type="text/javascript">
window.onerror = function (errorMsg, url, lineNumber) {
alert('Error: ' + errorMsg);
}
var throwError = function () {
throw new Error(
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Something went wrong. Something went wrong. Something went wrong. Something went wrong. ' +
'Some text gets truncated before this point!');
}
</script> …
Run Code Online (Sandbox Code Playgroud) onerror ×10
javascript ×6
html ×3
css ×2
image ×2
android ×1
background ×1
exception ×1
firefox ×1
html5 ×1
imagesource ×1
jquery ×1
onload ×1
rx-android ×1
rx-java ×1
script-tag ×1
window ×1