2009-01-04 22 views
21

Piszę rozszerzenie paska bocznego przeglądarki Firefox i potrzebuję sposobu na pobranie adresu URL bieżącej strony, aby można było sprawdzić to w bazie danych i wyświetlić wyniki. Jak mogę to zrobić?Pobierz aktualny adres URL strony z rozszerzenia paska bocznego firefox

+1

Myślę, że to pytanie jest o starej-szkoły Paski Firefox, a nie nowy [sidebar SDK] (https://developer.mozilla.org/en-US/Add-ons/SDK/Low- Level_APIs/ui_sidebar). – Flimm

Odpowiedz

15
window.top.getBrowser().selectedBrowser.contentWindow.location.href; 

może działać, inaczej myślę, że trzeba użyć:

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; 
+5

gBrowser.contentWindow.location.href działa również –

+1

Może być konieczne zastąpienie 'Components.interfaces' tylko' Ci' wszędzie w powyższej odpowiedzi. Więcej informacji można znaleźć pod adresem http://stackoverflow.com/questions/12558983/nsisockettransportservice-using-firefox-addon-sdk, a także dodać 'const {Ci, components} = require (" chrome ")' na górę skryptu. – jobin

2

https://developer.mozilla.org/En/Working_with_windows_in_chrome_code

Jeśli chcesz uzyskać dostęp do głównego przeglądarkę z kodu uruchomionego w pasku bocznym, będziesz coś jak to, co napisał Wimmel, z wyjątkiem ostatniego wiersza można uprościć do

mainWindow.content.location.href 

(alternatywnie możesz użyć API 's' zwracającego nsIURI).

W zależności od zadania, to może mieć sens, aby uruchomić kod w oknie przeglądarki (np w przewodnika ładowania strony), to może uzyskać dostęp do bieżącej strony za pośrednictwem content skrót i bocznym poprzez document.getElementById("sidebar").contentDocument lub .contentWindow.

-1

Hallo,

starałem się wdrożyć to w JavaScript, ponieważ muszę, że w moim projekcie też, ale wszystkie trzy możliwe rozwiązania nie działa. Zaimplementowałem także małą witrynę, aby ją przetestować, ale to też nie zadziałało.

Oto kod źródłowy małym miejscu:

<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> 
+1

JavaScript na stronie internetowej nie zachowuje się tak samo jak JavaScript w dodatku Firefox. Kiedy piszesz stronę internetową, "dokument" odnosi się do tej strony. Podczas pisania addonu "dokument" odnosi się do dokumentu XUL, w którym osadzony jest skrypt. – MatrixFrog

19

Natknąłem się na to stanowisko, szukając odpowiedzi na to samo pytanie.

Właściwie myślę, że to tak proste jak

alert(window.content.location.href) 

Zobacz także https://developer.mozilla.org/en/DOM/window.content

+3

Wydaje się to działać, jeśli nakładasz się na główne okno przeglądarki (browser.xul), ale nie wiem, czy zadziała w innych przypadkach. – MatrixFrog

4

To wydaje się działać dobrze dla mnie

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; 
} 
+0

powinieneś dodać 'function getCurrentURL() {' i '}' do układu kodu. Są częścią kodu. – dierre

+0

oops my bad - naprawiono. – Kapil

+0

+1 Ten kod naprawdę działa, dziękuję :) –

1

Jeśli trzeba tylko domenę i subdomeny ;

Użycie;

PageDomain.getDomain(); // stackoverflow.com 
PageDomain.getSubDomain(); // abc.stackoverflow.com 

Kod;

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; 
     } 
} 
Powiązane problemy