我正在爲Firefox編寫一個側邊欄擴展,並且需要一種方法來獲取當前頁面的URL,以便我可以根據數據庫檢查它並顯示結果。我怎樣才能做到這一點?從Firefox的側邊欄擴展中獲取當前頁面的URL
回答
window.top.getBrowser().selectedBrowser.contentWindow.location.href;
可能的工作,否則我認爲你需要使用:
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
mainWindow.getBrowser().selectedBrowser.contentWindow.location.href;
gBrowser.contentWindow.location.href也可以工作 – 2011-11-21 13:43:10
在上面的答案中,您可能需要將`Components.interfaces`替換爲`Ci`。請參閱http://stackoverflow.com/questions/12558983/nsisockettransportservice-using-firefox-addon-sdk獲取更多內容,並在腳本的頂部添加const {Ci,components} = require(「chrome」)。 – jobin 2013-09-18 16:10:22
https://developer.mozilla.org/En/Working_with_windows_in_chrome_code
如果你需要從一個側欄運行代碼,你會的東西進入主瀏覽器就像Wimmel發佈的一樣,除了最後一行可以簡化爲
mainWindow.content.location.href
(或者你可以使用API返回一個nsIURI)。
根據任務的不同,它可能是有意義的運行在瀏覽器窗口中的代碼,而不是(在網頁加載處理例如),那麼就可以通過document.getElementById("sidebar").contentDocument
或.contentWindow
通過content
快捷方式和工具條訪問當前頁面。
喂,
我試圖用JavaScript來實現這一點,因爲我需要在我的項目太多,但所有三個可能的解決方案沒有奏效。我還實施了一個小型網站來測試它,但這也不起作用。
這裏是小網站的源代碼:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function Fall1() {
alert(window.top.getBrowser().selectedBrowser.contentWindow.location.href);
}
function Fall2() {
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
alert(mainWindow.getBrowser().selectedBrowser.contentWindow.location.href);
}
function Fall3() {
alert(document.getElementById("sidebar").contentWindow.location.href);
}
</script>
</head>
<body>
<form name="Probe" action="">
<input type="button" value="Fall1"
onclick="Fall1()">
<input type="button" value="Fall2"
onclick="Fall2()">
<input type="button" value="Fall3"
onclick="Fall13()">
</form>
</body>
</html>
網頁中的Javascript在Firefox插件中的行爲與Javascript不同。當你編寫網頁時,「文檔」是指該網頁。在編寫插件時,「document」指的是腳本所嵌入的XUL文檔。 – MatrixFrog 2010-06-24 16:12:51
我絆了這個職位,而在尋找的答案,同樣的問題。
其實我覺得這是那麼容易,因爲
alert(window.content.location.href)
這似乎工作,如果你是覆蓋主瀏覽器窗口(browser.xul),但我不知道它是否會在其他情況下工作。 – MatrixFrog 2010-06-24 16:47:09
這似乎對做工精細我
function getCurrentURL(){
var currentWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var currBrowser = currentWindow.getBrowser();
var currURL = currBrowser.currentURI.spec;
return currURL;
}
如果您只需要域和子域 ;
用法;
PageDomain.getDomain(); // stackoverflow.com
PageDomain.getSubDomain(); // abc.stackoverflow.com
代碼;
PageDomain = {
getDomain : function() {
var docum = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var domain = PageDomain.extractDomain(new String(docum.location));
return domain;
},
getSubDomain : function() {
var docum = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var subDomain = PageDomain.extractSubDomain(new String(docum.location));
return subDomain;
},
extractDomain: function(host) {
var s;
// Credits to Chris Zarate
host=host.replace('http:\/\/','');
host=host.replace('https:\/\/','');
re=new RegExp("([^/]+)");
host=host.match(re)[1];
host=host.split('.');
if(host[2]!=null) {
s=host[host.length-2]+'.'+host[host.length-1];
domains='ab.ca|ac.ac|ac.at|ac.be|ac.cn|ac.il|ac.in|ac.jp|ac.kr|ac.nz|ac.th|ac.uk|ac.za|adm.br|adv.br|agro.pl|ah.cn|aid.pl|alt.za|am.br|arq.br|art.br|arts.ro|asn.au|asso.fr|asso.mc|atm.pl|auto.pl|bbs.tr|bc.ca|bio.br|biz.pl|bj.cn|br.com|cn.com|cng.br|cnt.br|co.ac|co.at|co.il|co.in|co.jp|co.kr|co.nz|co.th|co.uk|co.za|com.au|com.br|com.cn|com.ec|com.fr|com.hk|com.mm|com.mx|com.pl|com.ro|com.ru|com.sg|com.tr|com.tw|cq.cn|cri.nz|de.com|ecn.br|edu.au|edu.cn|edu.hk|edu.mm|edu.mx|edu.pl|edu.tr|edu.za|eng.br|ernet.in|esp.br|etc.br|eti.br|eu.com|eu.lv|fin.ec|firm.ro|fm.br|fot.br|fst.br|g12.br|gb.com|gb.net|gd.cn|gen.nz|gmina.pl|go.jp|go.kr|go.th|gob.mx|gov.br|gov.cn|gov.ec|gov.il|gov.in|gov.mm|gov.mx|gov.sg|gov.tr|gov.za|govt.nz|gs.cn|gsm.pl|gv.ac|gv.at|gx.cn|gz.cn|hb.cn|he.cn|hi.cn|hk.cn|hl.cn|hn.cn|hu.com|idv.tw|ind.br|inf.br|info.pl|info.ro|iwi.nz|jl.cn|jor.br|jpn.com|js.cn|k12.il|k12.tr|lel.br|ln.cn|ltd.uk|mail.pl|maori.nz|mb.ca|me.uk|med.br|med.ec|media.pl|mi.th|miasta.pl|mil.br|mil.ec|mil.nz|mil.pl|mil.tr|mil.za|mo.cn|muni.il|nb.ca|ne.jp|ne.kr|net.au|net.br|net.cn|net.ec|net.hk|net.il|net.in|net.mm|net.mx|net.nz|net.pl|net.ru|net.sg|net.th|net.tr|net.tw|net.za|nf.ca|ngo.za|nm.cn|nm.kr|no.com|nom.br|nom.pl|nom.ro|nom.za|ns.ca|nt.ca|nt.ro|ntr.br|nx.cn|odo.br|on.ca|or.ac|or.at|or.jp|or.kr|or.th|org.au|org.br|org.cn|org.ec|org.hk|org.il|org.mm|org.mx|org.nz|org.pl|org.ro|org.ru|org.sg|org.tr|org.tw|org.uk|org.za|pc.pl|pe.ca|plc.uk|ppg.br|presse.fr|priv.pl|pro.br|psc.br|psi.br|qc.ca|qc.com|qh.cn|re.kr|realestate.pl|rec.br|rec.ro|rel.pl|res.in|ru.com|sa.com|sc.cn|school.nz|school.za|se.com|se.net|sh.cn|shop.pl|sk.ca|sklep.pl|slg.br|sn.cn|sos.pl|store.ro|targi.pl|tj.cn|tm.fr|tm.mc|tm.pl|tm.ro|tm.za|tmp.br|tourism.pl|travel.pl|tur.br|turystyka.pl|tv.br|tw.cn|uk.co|uk.com|uk.net|us.com|uy.com|vet.br|web.za|web.com|www.ro|xj.cn|xz.cn|yk.ca|yn.cn|za.com';
domains=domains.split('|');
for(var i=0;i<domains.length;i++) {
if(s==domains[i]) {
s=host[host.length-3]+'.'+s;
break;
}
}
} else {
s=host.join('.');
}
// Thanks Chris
return s;
},
extractSubDomain:function(host){
host=host.replace('http:\/\/','');
host=host.replace('https:\/\/','');
re=new RegExp("([^/]+)");
host=host.match(re)[1];
return host;
}
}
- 1. Firefox-擴展 - 如何製作側邊欄
- 2. 在Chrome擴展中獲取當前頁面的url
- 3. 將圖像置於firefox側邊欄擴展的標題欄中
- 4. 從Chrome擴展中獲取當前頁面的源HTML
- 5. 獲取Firefox的擴展頁面大小
- 6. 從WebView獲取當前頁面的URL
- 7. 我可以從Firefox擴展中獲取當前頁面源代碼嗎?
- 8. 側邊欄中的Firefox擴展圖像顯示
- 9. 獲取當前頁面url
- 10. 從url獲取當前頁面
- 11. safari擴展從地址欄獲取url
- 12. 側邊欄向左擴展的背景
- 13. Firefox側欄獲取選項卡URL
- 14. 獲取邊欄列以擴展到頁面底部
- 15. 獲取當前頁面的URL
- 16. 屏幕右側的側邊欄擴展的居中佈局
- 17. 使用JavaScript在Firefox擴展中動態獲取網頁的URL
- 18. WordPress無法從側邊欄文件獲取頁面ID?
- 19. wordpress - 如何從側邊欄頁面獲取php變量
- 20. Chrome擴展程序:獲取當前頁面的字符集
- 21. WordPress的側邊欄:基於當前頁面查詢特定頁面
- 22. firefox擴展如何訪問側邊欄元素
- 23. 添加頁面側邊欄
- 24. 從Firefox擴展中通知iFrame頁面?
- 25. 如何從分頁工具欄中獲取當前頁面
- 26. 左側邊欄擴展水平背景?
- 27. 如何「激活」Contentful側邊欄擴展?
- 28. Bootstrap擴展側邊欄容器
- 29. 側邊欄+ 2個擴展內容div
- 30. 檢測當頁面加載Firefox擴展
我認爲這個問題是關於老派的Firefox工具條,而不是新的[欄SDK(https://developer.mozilla.org/en-US/Add-ons/SDK/Low- Level_APIs/ui_sidebar)。 – Flimm 2015-06-01 16:06:54