Я создаю надстройку, которая использует браузер overlay.xul, в который включены js-файлы. Самый простой способ, которым я нашел изменение HTML на веб-странице, - это тот код, который я нашел на mdn, я считаю.Вставка html на лету и вкладки
const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START;
const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP;
var myListener = {
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) { },
onLocationChange: function(aProgress, aRequest, aURI) {
PageLoad.initialzed = false;
PageLoad.init();
},
onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) { },
onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) { },
onSecurityChange: function(aWebProgress, aRequest, aState) { }
};
gBrowser.addProgressListener(myListener);
var PageLoad = {
initialzed : false,
browser : null,
domain : null,
appcontent : null,
init : function() {
PageLoad.appcontent = document.getElementById("appcontent");
if (PageLoad.appcontent) {
PageLoad.appcontent.addEventListener("DOMContentLoaded", PageLoad.load, true);
}
},
load : function() {
//I do this so it only calls the function once
if (PageLoad.initialzed == false) {
PageLoad.initialzed = true;
PageLoad.browser = gBrowser.contentDocument;
PageLoad.domain = (PageLoad.browser.location.host.match(/([^.]+)\.\w{2,3}(?:\.\w{2})?$/) || [])[1];
myFunctiontoInsertHTML();
}
}
};
Тогда я могу использовать PageLoad.browser.createElement('div')
и так далее в моей функции .. Это работает хорошо до сих пор, но я столкнулся с проблемой, что с несколькими открытыми вкладками, моя PageLoad.domain
переменный содержит домен последней вкладки загруженной или веб-страницу (которая, в свою очередь, вызывает ошибки, вставляя html на 2 или более разных страницах/вкладках). Поэтому я хочу изменить каждый раз, когда пользователь нажимает на другую вкладку или перезагружает страницу, которую я хочу вызвать, но я столкнулся с тупиком.
проверить [на странице load] (https://developer.mozilla.org/en/Code_snippets/On_page_load) и [url bar listner] (https://developer.mozilla.org/en/Code_snippets/Progress_Listeners# Пример: _Notification_when_the_value_in_Address_Bar_changes) –
Я использовал свою собственную вариацию этой ссылки «на странице», но этот слушатель строки url именно то, что мне нужно, я думаю. – thefoyer