― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年8月28日(木) 14:39 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
初めまして。早速ですが質問です。

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

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


通報する
ページトップ
 プロフィール  
引用付きで返信する  
 記事の件名: 自己解決
投稿記事Posted: 2008年8月31日(日) 00:45 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
少し無理矢理ですが一応以下の方法でできました。

コード:
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;}
}

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 2 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[30人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean