ローカルドメイン内でのみアクセスできる(?)オブジェクトwindow.opera.feeds

Webfeed.html のソースに出てくる window.opera.feeds というのを見てみる。

window.opera.feeds というのは、おそらくローカルドメインからしかアクセスできないオブジェクトで、しかもローカルドメイン内でも

javascript:var a=[];for(var b in window.opera){a.push(b)}alert(a.join('\n'));void(0);

などとやっても表示されない。隠蔽されてる?
参考。

しかしながら、フィードプレビューの中では使用できる。これはたぶん URL はウェブ上のものでも、Opera 的にはローカルのものとして扱っているということだろう。

なので、フィードプレビュー (例えば http://d.hatena.ne.jp/edvakf/rss) 内から

javascript:window.open().document.write('hoge');

などとしようとすると、http://d.hatena.ne.jp/edvakf/rss という (ローカルドメインではない) ページが開き、そこに何か書こうとするので "Security violation" というエラーを返す。

window.opera.feedsのプロパティとメソッド

http://d.hatena.ne.jp/edvakf/rss 内で調べて、結果を以下にまとめた。

どういう書き方をしたらよかったのか分からないけど、言いたいことは分かると思う。

尚、a○achang とか IT○記とかいう箇所が出てくるけど、この記事とはまったく関係ない。何故こうなるかは後述。

feeds //=>[object WebFeeds]
	length //=>14
	item()
	allFeeds //=>[object FeedList]
	allFeeds[0]
		author //=>amachang (ナゼ!?)
		entries //=>[object FeedEntryList]
			length //=>5
			item()
		entries[0] //=>[object FeedEntry]
			author //=>amachang (ナゼ!?)
			content //=>[object FeedContent]
				data //=>IT戦記のフィードの本文 (ナゼ!?)
				isBinary //=>false
				isMarkup //=>true
				isPlainText //=>false
				type //=>text/html
			id //=>1
			keep //=>false
			publicationDate //=>Sat Nov 08 2008 00:47:19 GMT-0500
			status //=>0
			title //=>[object FeedContent]
				data //=>Firefox メモ
				isBinary //=>false
				isMarkup //=>false
				isPlainText //=>true
				type //=>text/plain
			uri //=>http://d.hatena.ne.jp/amachang/20081108/1226123239
			getProperty()
		icon //=> (出力なし)
		id //=>1
		isSubscribed //=>false
		lastUpdate //=>Sat Nov 08 2008 01:51:43 GMT-0500
		logo //=> (出力なし)
		maxAge //=>0
		maxEntries //=>0
		minUpdateInterval //=>0
		prefetchPrimaryLink //=>false
		showImages //=>true
		size //=>0
		status //=>0
		title //=>[object FeedContent]
			data //=>IT戦記 (ナゼ!?)
			isBinary //=>false
			isMarkup //=>false
			isPlainText //=>true
			type //=> text/plain
		total //=>5
		unread //=>5
		updateInterval //=>60
		uri //=>http://d.hatena.ne.jp/amachang/rss
		userDefinedTitle //=>IT戦記 (ナゼ!?)
		subscribe() //=>undefined
		unSubscribe() //=>undefined
		getProperty()
	maxAge //=>0
	maxEntries //=>0
	maxSize //=>0
	showImages //=>true
	subscribedFeeds //=>[object FeedList]
		length //=>0
		item() 
	updateInterval //=>60
	loadFeed()
	updateFeeds()
	getFeedById()
	subscribeNative()

気になるところ

window.opera.feeds.allFeeds[0].author //=>amachang
以下略

これを調べているときには気づかなかったのだが、window.opera.feeds.allFeeds というのは、Opera がキャッシュしているフィードをすべて返すのだと思う。(激しく推測)

Webfeed.html では、window.opera.feeds.allFeeds[*].uri==window.location なものをわざわざ抽出している。

つまり、allFeeds の中のどこかに上の条件にあてはまるものがあるはず。(一番新しくキャッシュしたフィードは一番最後に追加される)

また、allFeeds で返されるものは、購読しているかどうかは関係ない。

window.opera.feeds.length //=>14

この数字は流動的っぽく、違う日に見たら10になっていたりした。

window.opera.subscribedFeeds //=>0

僕が購読しているフィードの総数は0ではない。

これはたぶん、キャッシュしているものの中で購読しているものがあるかどうか、ということだろう。(激しく推測)

window.opera.allFeeds[*].entries[*].keep //=>false
window.opera.allFeeds[*].entries[*].status //=>0
window.opera.allFeeds[*].entries[*].getProperty()
window.opera.feeds.subscribeNative()

不明。

まとめ

これを使ってローカルフィードリーダーを作れという前振りか?

Operaフィードリーダーインターフェイスって HTML ベースな他のタブとはまったく別だし、パネルに入れて使うことが出来なかったりするし、イマイチだもん。