Я читаю и хакую с https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads, но, похоже, могу делать то, что мне нужно.
Я работаю над Chromeless , пытаясь предотвратить перемещение основного элемента xulbrowser, например, ссылки не должны работать, как и window.location.href="http://www.example.com/"
.
Я предполагаю, что могу сделать это через browser.webProgress.addProgressListener
, а затем прослушать onProgressChange
, но я не могу понять, как провести различие между запросом ресурса и browser
изменением местоположения (кажется, что onLocationChange
слишком поздно, поскольку документ уже выгружается).
browser.webProgress.addProgressListener({
onLocationChange: function(){},
onStatusChange: function(){},
onStateChange: function(){},
onSecurityChange: function(){},
onProgressChange: function(){
aRequest.QueryInterface(Components.interfaces.nsIHttpChannel)
if( /* need to check if the object triggering the event is the xulbrowser */ ){
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
}
},
QueryInterface: xpcom.utils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference])
}, wo._browser.webProgress.NOTIFY_ALL);
Другой вариант, который звучит многообещающе, - это метод nsIContentPolicy.shouldLoad()
, но я действительно понятия не имею, как «создать компонент XPCOM, расширяющий nsIContentPolicy, и зарегистрировать его в категории« content-policy »с помощью nsICategoryManager.»
Есть идеи?