我有一个C#webserver,它为基于浏览器的客户端提供了一些html / js / css和图像。
我使用javascript动态创建页面,在从websocket C#服务器接收消息时填充图像和div。
有时,我收到来自websocket的消息,我尝试访问可能受保护的网络服务器中的资源。
我有一些自定义的http服务器事件(比方说406),因为否则the browser pops up a dialog box for digest auth login。
我想知道是否有办法将所有406个事件引导到同一个函数中,比如说
RegisterHttpEventHandler(406,myFunction);
我想我可以在try和catch中包装任何请求/动态负载,虽然我喜欢这种方式更清晰。
修改
以下是我目前实施的工作流程示例,该工作流程正常。
// Websocket definition
var conn = new WebSocket('ws://' + addressIP);
// Websocket receiver callback
conn.onmessage = function (event) {
// my messages are json-formatted
var mObj = JSON.parse(event.data);
// check if we have something nice
if(mObj.message == "I have got a nice image for you"){
showImageInANiceDiv(mObj.ImageUrl);
}
};
// Dynamic load image
function showImageInANiceDiv(imgUrl )
{
var imgHtml = wrapUrlInErrorHandler(imgUrl);
$("#imageBox").html(imgHtml);
}
// function to wrap everything in an error handler
function wrapUrlInErrorHandler(Url)
{
return '<img src="' + Url + '" onerror="errorHandler(\''+ Url +'\');"/>';
}
// function to handle errors
function errorHandler(imgUrl)
{
console.log("this guy triggered an error : " + imgUrl);
}
//
答案 0 :(得分:1)
onerror并没有告诉我失败了什么,所以我必须让XHR找到它。这是一件小事
你可以先试试XHR。如果失败,您就知道发生了什么,如果成功,您可以显示缓存中的图像(另请参阅here)。当然,您也可以让它为特殊状态代码调用一些全局定义的自定义挂钩 - 但您需要手动调用它,没有预定义的全局事件源。
我希望有类似document.onerror处理程序的东西,以避免每次我必须在页面中放置图像时使用wrapUrlInErrorHandler函数
那是不可能的。 error
事件(MDN,MSDN)不会冒泡,只会直接触发<img>
元素。但是,如果您没有使用内联事件属性,那么您可以绕过那个丑陋的wrapUrlInErrorHandler
但(traditional) advanced event handling:
function showImageInANiceDiv(imgUrl) {
var img = new Image();
img.src = imgUrl;
img.onerror = errorHandler; // here
$("#imageBox").empty().append(img);
}
// function to handle errors
function errorHandler(event) {
var img = event.srcElement; // or use the "this" keyword
console.log("this guy triggered an "+event.type+": " + img.src);
}