2014-10-07 80 views
1

我想知道如何使用Firefox插件在頁面加載時修改頁面的URL。我被引導到建議,如the following。具體來說,當用戶通過地址欄轉到「https://www.google.com」時,我想重定向到「https://www.google.co.uk」。重訪 - 修改URL在Firefox中加載頂級頁面之前

對於我的具體目的,上述解決方案几乎可行,但它重定向了太多的URL。我發現的一個問題如下:雖然每次都可以重定向,但有時我不想重定向。例如,在Windows中,我似乎不僅在當前標籤的URL爲常規Google時重定向,而且當頁面所做的某個查詢包含上述鏈接時(例如新聞文章),我也會重定向。

是否有任何方式通過檢查當前標籤的URL來使用Mozilla的觀察者框架重定向?如果沒有,是否有一些替代解決方案仍然使用Mozilla的附加SDK?

編輯:以下是我的小車源代碼。

var myObserver = { 
    register: function() { 
     var observerService = Components.classes["@mozilla.org/observer-service;1"] 
     .getService(Components.interfaces.nsIObserverService); 
     observerService.addObserver(this, TOPIC_MODIFY_REQUEST, false); 
    }, 
    //observe function to capture the changed event 
    observe : function(aSubject, aTopic, aData) { 
     if (TOPIC_MODIFY_REQUEST == aTopic) { 
      var url; 
      aSubject.QueryInterface(Components.interfaces.nsIHttpChannel); 

      url = aSubject.URI.spec; 
      url = encodeURIComponent(url); 


      if (url.indexOf("google.nl") !=-1 || url.indexOf("hl%3Dnl") !=-1 
       || url.indexOf("google.com%2Fnl") !=-1 || url == "https%3A%2F%2Fwww.google.com" 
       || url == "https%3A%2F%2Fwww.google.com%2Fncr" || url == 
       "https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl") 
      { 
       aSubject.cancel(Components.results.NS_BINDING_ABORTED); 
       loadURL("https://www.google.co.uk/"); 
      } 
    } 
} 

function loadURL(url) { 
    // Set the browser window's location to the incoming URL 
    window._content.document.location = url; 
    // Make sure that we get the focus 
    window.content.focus(); 
} 
+0

而不是aSubject.cancel,你應該做的aSubject.redirectTo ,因爲你的loadUL函數只在當前選中的選項卡上工作。 – Noitidart 2014-11-06 21:45:04

回答

1

檢查LOAD_INITIAL_DOCUMENT_URI標誌,如果是,則中止/重新確定它。否則不要。如果此標誌存在,則它是頂級頁面。

編輯: 根據你的代碼,你需要做的測試,這是QueryInterface d,如果有這樣的標誌像這樣aSubject:

var oHttp = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel); 
if (oHttp.loadFlags & Components.interfaces.nsIHttpChannel.LOAD_INITIAL_DOCUMENT_URI) { 
    //is top level load 
} 
+0

花了很長時間我終於測試這個,但只有頂級的,這個工程! :D謝謝! – Matt 2014-11-06 21:11:45

相關問題