新しいタブでページを開いたときURIを取得する方法

拡張機能の開発に関するフォーラムです。

モデレータ: Forum Moderators

masahal
記事: 33
登録日時: 2008年8月24日(日) 21:09
連絡する:

新しいタブでページを開いたときURIを取得する方法

投稿記事 by masahal »

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

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

--------------------------
Firefox3.01
Windows XP Professional
masahal
記事: 33
登録日時: 2008年8月24日(日) 21:09
連絡する:

自己解決

投稿記事 by masahal »

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

コード: 全て選択

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/
返信する