MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

新しいタブでページを開いたときURIを取得する方法
https://forums.mozillazine.jp/viewtopic.php?f=26&t=7743
ページ 11

作成者:  masahal [ 2008年8月28日(木) 14:39 ]
記事の件名:  新しいタブでページを開いたときURIを取得する方法

初めまして。早速ですが質問です。

ProgressListenerのonStateChangeイベントは新しいタブでページを開いた場合、
ページをロードし終わるまでURIを取得できないようなんですが、どうすればいいでしょうか。

--------------------------
Firefox3.01
Windows XP Professional

作成者:  masahal [ 2008年8月31日(日) 00:45 ]
記事の件名:  自己解決

少し無理矢理ですが一応以下の方法でできました。

コード:
window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension={
   init: function(){
      gBrowser.addProgressListener(myListener);
      //タブ追加イベント
      gBrowser.tabContainer.addEventListener("TabOpen", myListener.tabAdded, false);
      var appcontent = document.getElementById("appcontent");   // browser
      if(appcontent) appcontent.addEventListener("DOMContentLoaded", this.onPageLoad, true);
   },
   onPageLoad : function(){
      //タイマクリア
      window.clearTimeout(myListener.timeoutID);
      delete myListener.timeoutID;
   }
}

const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START;
var myListener={
      QueryInterface: function(aIID){
   if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
      aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
      aIID.equals(Components.interfaces.nsISupports))
   return this;
   throw Components.results.NS_NOINTERFACE;
},

onStateChange: function(aWebProgress, aRequest, aFlag, aStatus)
{
   if(aFlag & STATE_START)
   {
       var uri=aRequest.name;
       alert(uri);
   }
   return 0;
},
tabAdded: function(event){
   var browser = event.target.linkedBrowser;
   //タイマをセット
   myListener.timeoutID=window.setTimeout(myListener.tabAdded2, 10, browser);   
},
tabAdded2 : function(browser){
   var uri=browser.currentURI.spec;
   //URIが取得できるまでタイマをセットし続ける
   if(uri=="about:blank"){
      myListener.timeoutID=window.setTimeout(myListener.tabAdded2, 10, browser);
      return;
   }
   delete myListener.timeoutID;
   alert(uri);
},
onLocationChange: function(){return 0;},
onProgressChange: function() {return 0;},
onStatusChange: function() {return 0;},
onSecurityChange: function() {return 0;},
onLinkIconAvailable: function() {return 0;}
}

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/