2013-12-16 123 views
2

有没有办法拦截客户端的连接问题?如何拦截GeckoFx连接错误

我的意思是如果用户失去连接并尝试访问某个网站,GeckoFx/Xulrunner会显示一条消息“[url]找不到,请检查名称并重试。在警报式消息框上。

是否有可能更改该消息或拦截它来处理它并显示错误页面?

发现了解决方案: 经过更多的测试,并要求在geckofx的帮助下,我看到了这条线是缺失:

GeckoWebBrowser.UseCustomPrompt();

而这两行和代理分配到PromptServiceCreator必须设置为BEFORE Xpcom.Initialize方法。这是我花了很长时间才发现的部分,因为我的Initialize方法在另一个类中。

+1

我发现,这有助于: 'GeckoPreferences.User [“browser.xul.error_pages。启用“] = true;' 之后,您可以检查Navigated事件中的”IsErrorPage“。但似乎我不能取代文件内容。所以问题依然存在。 – pca1987

回答

0

如果将“browser.xul.error_pages.enabled”设置为禁用(false),则可以编写自己的PromptService。

首先实现自己迅速的服务:

class MyPromptService : nsIPromptService2, nsIPrompt { .... } 

然后早早就在你的程序的启动:

PromptFactory.PromptServiceCreator =() => new MyPromptService(); 

这将所有你做你想要的所有报警什么。

如果不工作,那么,你永远可以修改文件内容:

browser.DocumentCompleted += (s, e) => 
{ 
    if (!sometest) 
     return; 

    GeckoHtmlElement g = (GeckoHtmlElement)browser.Document.DocumentElement; 
    g.InnerHtml = "what ever you want."; 
}; 
+0

谢谢你的时间。我试过这个,并试图在MyPromptService的每个方法中放置一个断点,看起来它不起作用。有任何想法吗? (我已经完成了所有的未实现的例外,并且没有被启动)。 我禁用了错误页面属性,并且创建了类PromptFactory.PromptServiceCreator =()=> new MyPromptService();'的新实例。 PS:重现错误我试图导航到一个不存在的IP,如http://10.0.0.77。 – pca1987

+0

已更新答案 - (因为PromptService未针对所有错误进行调用。) – Tom