Tôi đang viết tiện ích mở rộng thanh bên cho Firefox và cần có cách để lấy URL của trang hiện tại để tôi có thể kiểm tra nó trên cơ sở dữ liệu và hiển thị kết quả. Tôi có thể làm cái này như thế nào?Nhận URL trang hiện tại từ tiện ích mở rộng thanh bên firefox
Trả lời
window.top.getBrowser().selectedBrowser.contentWindow.location.href;
có thể làm việc, nếu không tôi nghĩ rằng bạn cần phải sử dụng:
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 cũng hoạt động –
Bạn có thể cần phải thay thế 'Components.interfaces' thành' Ci' ở mọi nơi trong câu trả lời ở trên. Tham khảo http://stackoverflow.com/questions/12558983/nsisockettransportservice-using-firefox-addon-sdk để biết thêm và cũng thêm 'const {Ci, components} = require (" chrome ")' vào đầu tập lệnh của bạn. – jobin
https://developer.mozilla.org/En/Working_with_windows_in_chrome_code
Nếu bạn cần truy cập vào trình duyệt chính từ mã chạy trong một bên, bạn sẽ một cái gì đó giống như những gì Wimmel đã đăng, ngoại trừ dòng cuối cùng có thể được đơn giản hóa thành
mainWindow.content.location.href
(Hoặc bạn có thể sử dụng API trả về một nsIURI).
Tùy thuộc vào nhiệm vụ của bạn, nó có thể làm cho tinh thần để chạy mã trong cửa sổ trình duyệt để thay thế (ví dụ trong một handler tải trang), sau đó nó có thể truy cập vào trang hiện qua content
shortcut và các sidebar qua document.getElementById("sidebar").contentDocument
hoặc .contentWindow
.
Hallo,
tôi đã cố gắng thực hiện điều này trong JavaScript, bởi vì tôi cần điều đó trong dự án của tôi cũng vậy, nhưng cả ba giải pháp có thể không hoạt động. Tôi cũng đã thực hiện một trang web nhỏ để kiểm tra nó, nhưng điều này cũng không hoạt động.
Đây là mã nguồn của trang web nhỏ:
<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 trong trang web không hoạt động giống như Javascript trong trình bổ sung Firefox. Khi bạn đang viết một trang web, 'tài liệu' đề cập đến trang web đó. Khi bạn đang viết một addon, 'document' là tài liệu XUL mà kịch bản được nhúng vào. – MatrixFrog
Tôi loạng choạng về bưu chính này trong khi tìm kiếm một câu trả lời cho câu hỏi tương tự.
Thật sự tôi nghĩ rằng đó là dễ dàng như
alert(window.content.location.href)
Xem thêm https://developer.mozilla.org/en/DOM/window.content
Điều này dường như hoạt động nếu bạn đang che phủ cửa sổ trình duyệt chính (browser.xul) nhưng tôi không biết liệu nó có hoạt động trong các trường hợp khác hay không. – MatrixFrog
Điều này dường như làm việc tốt cho tôi
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;
}
Nếu bạn chỉ cần miền và subdomain ;
Cách sử dụng;
PageDomain.getDomain(); // stackoverflow.com
PageDomain.getSubDomain(); // abc.stackoverflow.com
Mã;
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. Mở URL trong tab/cửa sổ hiện tại từ Tiện ích mở rộng của Firefox
- 2. URL hiện tại trong Tiện ích mở rộng Safari
- 3. Tiện ích mở rộng của Firefox với jquery 1.3+
- 4. truy cập trang html hiện tại từ tiện ích mở rộng chrome
- 5. XMLHttpRequest trong Tiện ích mở rộng của Firefox
- 6. Tìm người dùng hiện đang đăng nhập từ một tiện ích mở rộng Firefox
- 7. Plugin/Tiện ích mở rộng Firefox cần thiết?
- 8. Tiện ích mở rộng của Firefox & XUL: lấy mã nguồn trang
- 9. cách gọi hàm trong tiện ích mở rộng của Firefox từ nút html
- 10. Chuyển đổi Tiện ích mở rộng của Google Chrome sang tiện ích mở rộng của Firefox hoặc Safari
- 11. Nhận URL trang hiện trong phần mở rộng Chrome
- 12. Tiện ích mở rộng của Firefox để đóng cửa sổ firefox
- 13. Sự khác nhau giữa tiện ích mở rộng Firefox và tiện ích bổ sung Firefox là gì?
- 14. Trang nền trong tiện ích mở rộng bật lên- chrome
- 15. Tiêm tệp CSS vào trang web qua tiện ích mở rộng firefox
- 16. Hủy yêu cầu HTTP GET từ Tiện ích mở rộng của Firefox
- 17. Giao tiếp giữa tiện ích mở rộng firefox và trang javascript
- 18. Tiện ích mở rộng của Firefox: Nhận văn bản đã chọn
- 19. Đặt tiêu đề HTTP từ tiện ích mở rộng của Firefox
- 20. Thêm tiện ích mở rộng vào URL: Đường ray
- 21. Tiện ích mở rộng của Chrome - Hình ảnh của tiện ích mở rộng trên Trang cài đặt
- 22. Tiện ích mở rộng PSake?
- 23. Tiện ích mở rộng của Chrome + Dart
- 24. Làm cách nào để thực thi chức năng JavaScript do trang xác định từ tiện ích mở rộng của Firefox?
- 25. Làm cách nào để nhận thông báo khi cửa sổ đóng trong tiện ích mở rộng của Firefox?
- 26. Làm mẫu từ tiện ích mở rộng twig
- 27. Cách lấy URL của tab hiện tại trong tiện ích mở rộng chrome của tôi bằng cách sử dụng javascript
- 28. Đăng nhập vào bảng điều khiển từ tiện ích mở rộng của Firefox?
- 29. Tiện ích mở rộng của Chrome + Devise + Rails App - Đặt yêu cầu được xác thực từ tiện ích mở rộng?
- 30. Tiện ích mở rộng Intellisense tùy chỉnh
Tôi nghĩ câu hỏi này là về thanh sidebar cũ của Firefox và không phải là [sidebar SDK] mới (https://developer.mozilla.org/en-US/Add-ons/SDK/Low- Level_APIs/ui_sidebar). – Flimm