الحصول على URL الصفحة الحالية من فايرفوكس امتداد الشريط الجانبي

StackOverflow https://stackoverflow.com/questions/410411

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أكتب امتداد الشريط الجانبي فايرفوكس بحاجة إلى وسيلة للحصول على عنوان 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;

نصائح أخرى

وأنا تعثرت على هذا المنصب في حين يبحث عن إجابة على السؤال نفسه.

والواقع أعتقد أنه من السهل كما

alert(window.content.location.href)

وانظر أيضا https://developer.mozilla.org/en/DOM/window. محتوى

ويبدو أن هذا العمل غرامة بالنسبة لي

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

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

إذا كنت تحتاج إلى الوصول إلى المتصفح الرئيسي من التعليمات البرمجية قيد التشغيل في الشريط الجانبي، عليك شيء من هذا القبيل ما نشر Wimmel، باستثناء السطر الأخير يمكن تبسيطها إلى

mainWindow.content.location.href

و(بدلا من ذلك يمكنك استخدام الصورة API العودة إلى nsIURI).

واعتمادا على المهمة الخاصة بك، فإنه قد يكون من المنطقي لتشغيل التعليمات البرمجية في نافذة المتصفح بدلا من ذلك (على سبيل المثال في معالج تحميل الصفحة)، فإنه يمكن الوصول إلى الصفحة الحالية عبر الاختصار content والشريط الجانبي عبر document.getElementById("sidebar").contentDocument أو .contentWindow.

إذا كنت بحاجة فقط المجال و فرعي;

الاستخدام ؛

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

ومرحبا،

ولقد حاولت لتنفيذ ذلك في جافا سكريبت، لأنني بحاجة إلى أن المشروع في بلدي أيضا، ولكن لم كل الحلول الممكنة الثلاثة لا تعمل. لقد نفذت أيضا موقع صغير لاختبار ذلك، ولكن هذا أيضا لم تنجح.

وهنا هو رمز مصدر من موقع صغير:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top