ローカルドメイン内でのみアクセスできる(?)オブジェクト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 ベースな他のタブとはまったく別だし、パネルに入れて使うことが出来なかったりするし、イマイチだもん。