Firefoxサイトのクイックキーインジケーター

私たちの多くは、注意深い読書のために定期的に開いているサイトのセットを念頭に置いていますが、いくつかの小さな情報にすぐに慣れるために、新しい記事やコメントがあるかどうかを確認し、パラメータが変更されていないかどうかを確認し、など。 多くの場合、サイトはそのようなニーズに対応するためにrssまたはメーリングリストを提供しますが、常にそうとは限りません。 このようなルーチンを自動化する方法の1つを説明しようとします。



ほとんどのFirefoxユーザーは、一般的なネットワークリソース(メール、ニュースアグリゲーター、ソーシャルネットワーク、天気予報サイトなど)の更新を通知する拡張機能におそらく精通しています。 しかし、すべてのサイトおよびすべての種類の情報で、拡張機能は在庫できません。 幸い、JavaScriptに少し精通している場合は、中間の拡張機能であるCustom Buttonsを使用して、そのような拡張機能の簡単で柔軟な類似性を数分で作成できます。 押されたときに任意のコードを実行するツールバーのボタンをすばやく作成したり、ブラウザの起動時に特定の動作を初期化することができます。 さらに、ページのコンテキスト(ユーザースクリプトを思い出させる)とブラウザーコンテキスト(完全な拡張機能と比較される)の両方でコードを実行できます。



この記事の目的には、カスタムボタンの操作に関する説明は含まれていません。リンクは、ドキュメントやフォーラムへの十分なリンクを提供します。 ただし、すべてが非常に単純に配置されています:ツールバーのコンテキストメニューを使用してボタンを作成し、新しいボタンのダイアログにコードを入力し、いくつかの追加のバンを選択し、ボタンを便利なツールバーにドラッグします-これで作業の準備ができました(ところで、拡張機能は追加のプロトコルを導入しますcustombutton://-ネットワーク上でボタンを簡単に公開し、通常のリンクまたはブックマークレットを使用するのと同じ方法でボタンを共有できます。



上記のインジケーター専用のコードレシピをいくつか紹介します。 単純なものからより複雑なものに移行します。 サンプルコードは、バージョン12以降のFirefoxで動作するはずです。 私はコードのさまざまな要素がさまざまな人々にとって愚かに見えるかもしれないことを知っていますが、例は完璧だと主張していません:私はアマチュアコードの助けを借りて日常の経験を共有するだけであり、これをもっとうまくできないことを心から謝罪します。



1.情報の簡単なリクエスト。





サイト全体のデータのごく一部しか必要ない場合があります。 この重要な情報を取得するために、ページ全体に大量の追加コンテンツ(広告、写真、フラッシュなど)とリソースを集中的に使用するスクリプトを読み込んでから、目的のセクションのページを検索する必要はまったくありません。 Ajaxを介して純粋な軽量htmlを取得し(同時に、何もロードおよび実行されません)、それをDOMに変換し、関心のある領域を自動的に見つけて、必要な情報のみを表示できます。



例として、魅力的ではなく、シンプルで明るいケースを取り上げます。 英語版ウィキペディアに掲載されている現在の記事数(現在400万件近く)を要求します。 これを行うには、ボタンを作成するダイアログの最初のタブに次のコードを挿入します(タブは「コード」と呼ばれます)。



var pageURL = "http://en.wikipedia.org/wiki/Main_Page"; var keyElementXPath = "/html/body//div[@id='articlecount']"; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgMain = "data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9/AAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB/WvXoYiIiIfEZfWBSIiIEGi/foqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF+iDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; var btn = this; function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { btn.image = imgMain; processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { btn.image = imgMain; processDoc((new DOMParser()).parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgMain; alert("Timeout"); } } xhr.onerror = function() { btn.image = imgMain; alert("HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { alert(keyElement.textContent); } else { alert("Parsing error"); } } getDoc(pageURL, true);
      
      







将来、別のサイトやその他の情報については、ほんの数行を変更する必要があります。 コードが何をするかを理解してみましょう。



ボタンコードは新しいFunction()を介して実行されるため、ブラウザのネームスペースでの干渉から何らかの形で保護する必要はありません。



関数の最初の変数は、他の条件のために再割り当てする必要がある変数です。 最初はページアドレス、2番目は必要な情報を含むキー要素のXPathです。 次に、2つの埋め込み画像を設定します:1つ目は、リクエスト中にボタンに表示されるパルセータです(再割り当てする必要はありません)、2つ目は、リクエストの最後にボタンに表示されるサイトアイコンです(同じアイコンを作成ダイアログのデフォルトボタンアイコンとして設定できます)。



XPathキー要素は、拡張機能を使用してインストールするのが非常に簡単です

XPather :有名なDOM Inspectorに統合するだけでなく、コンテキストメニューにその位置を追加し、ページ上の任意の要素をこの拡張機能のウィンドウで開いてそのXPathを取得できるようにします。 拡張機能は、すべてのリンクを含む完全なアドレスを提供し、場合によっては、たとえば要素のIDに依存することで短縮できる場合があります。 この例では、アドレスを減らしました(もちろん、キー要素にidがある場合、XPathは使用できませんが、ここではコードの普遍性から進んで、すべての場合に適したメソッドを適用します)。



XPathをビルドするとき、XHRはロードされたページでスクリプトを実行しないことに注意する必要があります。 したがって、コードの作成プロセスでは、JavaScriptが無効になっているページまたはプライマリHTMLを分析する必要があります。 キー要素がスクリプトによって形成されることがあります。この方法は不適切であり、隠されたバックグラウンドブラウザーではより複雑なアプローチを使用する必要がありますが、この記事では触れません。 ただし、そのようなケースはそれほど頻繁ではありません。



ボタン作成ウィンドウには、データを作成するための便利なツールがあります:-リソースを埋め込むためのアドレス;ウェブサイトアイコンのアドレスをbase64文字列に簡単に変換できます。 もちろん、URLの入力を妨げるものは何もありません。このようにして、完全に自律的なコードを作成し、ネットワークおよびローカルの要求を減らします。



次に、ボタンに将来の変数を割り当てます。これは最初にこれとして表されます。 そして、2つのサブ機能を使用します。1つはドキュメントコードを受け取り、2つ目はそれを逆アセンブルして必要な情報を提供します。



最初のサブ機能の開始時にパルセータを起動し、そのパラメータを使用してXHRを作成します。バックグラウンドリクエストフラグを設定します(通常のページの読み込み用に設計されたメッセージでブラウザが邪魔しないようにします)。 ユーザーがサードパーティのサイトからのCookieを無効にしている場合でも、FirefoxにXHRを使用してCookieを送信させるには、強制送信フラグを設定します(これがないと、Cookieは受け入れられず送信されません)。



最善を期待して、xhr.responseType = "document"を使用して、すぐにDOMにアクセスします。 ただし、このアプローチでは、条件のまれな合流が原因でエラーが発生し、 疑似タイムアウトが発生する可能性がありますbugzillaへのリンクに関する説明を参照してください )。 したがって、安全コードを挿入します:最初のタイムアウトで、ページコードを再度要求し、DOMParserを使用して解析します-これは少し複雑で無駄です( 何らかの理由でDOMParserがいくつかの追加リソースの読み込みを引き起こしますが、理論的には夜間のみ修正する必要があります)ビルドされますが、この修正が14番目のリリースに含まれるかどうかはわかりません)が、xhr.responseType = "document"のエラーが修正されるまで(おそらく16番目のリリースまで)より信頼性が高くなります。



結果として、リクエストのいくつかの結果があります:DOMの直接受信での最初の成功した呼び出し(引数pureXHR == trueで)はドキュメント解析関数の呼び出しにつながりますDOMで、ドキュメント解析関数を呼び出すことにより、2番目のタイムアウトまたは通信エラーが発生すると、対応するエラーメッセージが表示されます。



解析サブ関数は非常に簡単です。 まず、キー要素を取得しようとします。 要素が見つかった場合、必要な情報を発行します。 要素がない場合、サイトが何らかの間違ったページを提供していると思われ、エラーを報告します。 理由は異なる可能性があります:リダイレクト(XHRが空のドキュメントを受信して​​いる間)、承認が行われ、サイトが許可されていないユーザーに別のページを提供した、開発者がDOM構造を変更した-など。 次に、ブラウザにページをロードし、失敗の原因を確認し(HTTPアクティビティを調査する拡張機能の助けを借りて)、必要な調整を行う必要があります。



これは、ささいなことで50行のコードの情報を控えめに照会する簡単な方法です。 それでは、楽器を少し充実させてみましょう。



2.タイマーチェック付きのニュースインジケーター。





ボタン自体が間隔を空けて情報を要求し、そのステータスを表示することを望みます。ニュースがあります-ニュースがありません-エラーです。 このボタンは、たとえば、新しいトピック、コメント、プライベートメッセージ、および同様のイベントに関する電子メールアラートを提供しないフォーラムに適用できます。 ただし、そのようなニュースが表示されたページに明確な兆候を追加します(特別な要素または要素の属性の変更である可能性があります)。



rutracker.orgの個人的なメッセージを例として取り上げます。 拡張機能は個人メッセージページを確認します(他のページも可能です。ほとんどのページに共通するヘッダーに興味があります。プライベートメッセージページのみが最も経済的なオプションです)、目的のアイテムを検索し、プロパティを確認し、ボタンのアイコンを変更してステータスを報告し、さらにポップアップを表示しますヒント(音声通知またはトレイの上にポップアップウィンドウを追加できますが、この記事ではそのような問題については説明しません)。



この例では、アクションの原則を少し変更します。ボタン作成ダイアログの最初のタブではなく、2番目のタブが必要です。 このタブのコードは、ボタンがクリックされたときではなく、ブラウザーを起動した直後に実行されます。 これにより、タイマーによるリクエストの全時間に必要な変数と関数を割り当てることができ、ボタンのクリックごとにハンドラーを設定して柔軟性と利便性を高めることができます。 さらに、最初のオプションと比較したコードの変更のみを分析します。



 var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);
      
      



GIF、BASE64、R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv /////////////////////////////// YH / C05FVFNDQVBFMi4wAwEAAAAh + QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk / var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



QQBCgAPACwAAAAAEAAQAAAESPDJ + YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk / J8LqUPg + FRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk / J8LqWPw + FRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk / J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk / J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk / J8LqUPgeBRhV6 var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



; var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



gif形式; base64で、R0lGODlhEAAQAOZAAPv / ++ Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj / cwAQ + G1pbc3JzZOXk / Xx9TriACAs7zs / O9PX03t / E / P38 / 8HPP + rvk1JTY2JjbWxtVNXU / + XriAkUNnb / WES // 8zWVn / GwkV / wAMoGNnY / 8LRf8TSUtPS / var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



X / + LpsvPy3T / QwAIYIWBhZGY // 9HcQAM4DE9 / xkq / 3VxdQAOuKuvq6Gk / 9R / w1Fd ///// wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw ==「; var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



GIF、BASE64、R0lGODlhEAAQANU1AP39 / erq6pOTk5 + FN + Xl5eTk5N7e3vHx8bu7u7q6ut / f36KiotjY2LS0tPDw8JycnK + vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9 / F + jo6KmpqbKystPT05aWlmlpab29vaurq8 / Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P /// wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"。 var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



GIF、BASE64、R0lGODlhEAAQANU6AP98fP + AGP / M5V / EXP + 2TV + cnP9ycv / k5P8rK / 88PP8CAv9AQP / v75MAAP9HR // y8v8uLv8QELUAAP + TK / 9OTnQAAP89Pf + xsf81Nf + TRF / V1f9sbP9YWP9RUf +のLi / 96ev + Ojv / l5f9ubsAAAP9lZf var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



/ BWF / Q0P8MDP / Y2P / var pageURL = "http://pm.rutracker.org/forum/privmsg.php?folder=inbox"; var keyElementXPath = "/html/body/div[@id='body_container']/div[@id='page_container']/div[@id='page_header']/div[@id='main-nav']/table/tbody/tr/td[2]/a"; var delay = 10 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/gif;base64,R0lGODlhEAAQAOZAAPv/++Xh5THeANvf293Z3dXR1f4AOuvv66Ono6WhpZ2Zne3p7Zj/cwAQ+G1pbc3JzZOXk/Xx9TriACAs7zs/O9PX03t/e/P38/8HPP+rvk1JTY2JjbWxtVNXU/+XriAkUNnb/wES//8zWVn/GwkV/wAMoGNnY/8LRf8TSUtPS/9/nkf/C/8fUn7/S0RQ44T/X/+LpsvPy3T/QwAIYIWBhZGY//9HcQAM4DE9/xkq/3VxdQAOuKuvq6Gk/9r/w1Fd/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAezgECCg4IVC4SIgwcAAEABB4mEFTA2jAADAYkDBxcsBgYYABYEiAEADyKfBhkaCpErBxAYBigqEIQEDC8yAgAIJxkAHgMchAACAhICLQAKFCYFCAOCpsoCDAAOMzsTLgUJggMAIwy9FB8lNw0934ILEQg8PtkTDQ0hAB0Pgt8KEDQRNAwgkeNHjQAFBB0gEIAAAiAbAuAAYalYIgIEClxI4UCHhUiDYmxIwDDAIZABHkxDFAgAOw=="; var imgNoNews = "data:image/gif;base64,R0lGODlhEAAQANU1AP39/erq6pOTk5+fn+Xl5eTk5N7e3vHx8bu7u7q6ut/f36KiotjY2LS0tPDw8JycnK+vr5CQkKioqMrKym1tbfb29pSUlJ2dnaOjo3d3d6Wlpff398bGxoSEhH9/f+jo6KmpqbKystPT05aWlmlpab29vaurq8/Pz7i4uKamprGxsYuLi66urnt7e9bW1sPDw8HBwXl5ednZ2WNjY9zc3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAAAAAQABAAAAajwJpwKFQ4iMjhAQCoBQ5JokKUYAIIgSThsDENBgvApYAMABih70CRaUQxB8hikDpBiIXJCyUAIDAKZwQcRAACAhYCCAANFCsGCARCZokCEwARMx0aLAYJQgQAIBN9FCQtAg80nkIOFQgwH5gaDw8DAB4MQp4NchUZBAsSJS4BBkIHBQEFCDUSASpLTIRJBQUGGzERIxdRQzISCcoBR94BDJJIQQA7"; var imgErrorOrTimeout = "data:image/gif;base64,R0lGODlhEAAQANU6AP98fP+AgP/m5v/ExP+2tv+cnP9ycv/k5P8rK/88PP8CAv9AQP/v75MAAP9HR//y8v8uLv8QELUAAP+Tk/9OTnQAAP89Pf+xsf81Nf+trf/V1f9sbP9YWP9RUf+Li/96ev+Ojv/l5f9ubsAAAP9lZf+EhNwAAPMAAP+5uf+lpbkAAP8WFv+9vf9KSv8NDc0AAIYAAP9UVP8yMv/Bwf/Q0P8MDP/Y2P/9/f9mZv/MzP///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAAAAAQABAAAAajQJ1wKBwciMih4HbT2QRJ4iADYN5otiRN8ODIZIkbJIe03Qiir2wgMUQXAlxC1krhiLkC6FO7BRYDZzQTRDc1NRE1ATcGDSczATRCZok1BTcKFSYOJDMAQjQ3MQV9DTAjLggsnkIHDAEeGpgOCAgYNy8EQp4GcgwSNBYdJRc2M0ICOTY5AToUNhshVoRJOTkzDyoKKxBRQygUAMo2R942BJJIQQA7"; var btn = this; var parser = new DOMParser(); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { if (keyElement.className.indexOf("new-pm-link") > -1) { btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News"); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news"); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Authentication or parsing error"); } } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);







さらに2つの初期パラメーターのペアに追加されました:遅延(ブラウザーの起動と最初のタイマー要求の間の秒数)と間隔(分単位での追加要求間の間隔)。 この例では、それぞれ10秒と1時間です。



現在、2つのアイコンではなく、4つのアイコン全体があります。進行中のリクエストのインジケータ、ニュースの利用可能性と欠席のインジケータ、およびエラーのアイコンです。



また、DOMParserセーフティオブジェクト用の特別な変数を作成し、リクエストごとに再作成しないようにします。



次に、ボタンをマウスでクリックするためのハンドラーを追加します。 左クリックとマウスの中央クリックで十分です。 最初に押すと、特別なリクエストが開始され(タイマーが再起動します)、中央のボタンを押すと、ブラウザーで目的のページが開き、ニュースをより詳しく知ることができます。 中央のボタンハンドラーは現在のタブをチェックし、空であると同時に読み込みが開始されない場合は、その中のページを開きます。それ以外の場合は新しいタブで開きます。 また、そのような開始時に、タイマーを再起動し、次のリクエストまでニュースレートをリセットします。これは、ページを開くことは異常なリクエストに等しく、サイト上のニュースの読み取り(リセット)につながることを意味します。



この例のXHR結果ハンドラーはアラートを出しませんが、アイコンとツールチップの変更(後者にはリクエスト時間と結果に関する簡単な情報が含まれます)。



新しいメッセージがある場合、サーバーは特定のクラスの属性をキー要素に追加します(ページの右上隅の受信ボックスへのリンク)。 確認します。 サイトでの認証がクラッシュすると、サーバーはログインページへのリダイレクトを発行します。この場合、XHRは空のドキュメントを受信し、要素は見つかりません。DOMの他の変更の場合によくあるエラーが発生します。



変数と関数を定義した後、クリックハンドラーをボタンにアタッチし、最初の保留中のリクエストを呼び出してタイマーを開始します。



ところで、カスタムボタンには、イベントハンドラーに小さなバグがあります:onDestroyを介してハンドラーの削除を追加しない場合、ツールバー設定を呼び出す(ツールパレットを開閉する)たびにハンドラーが階層化(複製)されます。



3.ブラウザーセッション間のタイマーチェックと状態保存を備えたニュースインジケーター。





前の例では、ニュースがあるかどうかを理解するためにページを読み込むだけで十分でした。サーバーは、ユーザーが何を読んだか、いつから未読ニュースをカウントするかを覚えてくれました。 ただし、すべてのサイトにそのようなニュースインジケータがあるわけではありません。



例を挙げましょう。 最近、字幕ツールに1つのすばらしいプログラム、字幕編集が追加されました。 開発者のサイトは、エラーを報告して新しい機能をリクエストするユーザーとのコミュニケーションを確立しています サイトには、プログラムの新しいバージョンに関するメッセージを含む、著者による新しい投稿のRSSがあります。 ただし、最後の投稿へのコメントでは、通常、新しいバージョンの議論が行われ、作成者は現在の修正を含むアセンブリへのリンクを投稿することがよくあります。 このような中間的な変更に遅れないようにするには、定期的にメインページを開き、最後の投稿のリンクでコメントを確認する必要があります。



コメントを投稿するサブスクリプションはありません。 同様に、サイトには未読のコメントがあるという明らかな兆候はありません。 以前のコメント数を覚えて、トップリンクの数が増えているかどうかを確認する必要があります。 この比較をボタンにオーバーロードします。 彼女は最後の投稿へのリンクとその中のコメントの数を覚えています。 上位の投稿が変更されたり、コメントが追加されたりすると、ボタンはニュースについて通知します。



ニュースのリセットも少し変わります。 2番目の例では、ユーザーがサイトの新しい投稿を読んで、サイトメトリックがリセットされました。 リセットボタンはこれを予想していました。 3番目の例では、新しいコメントを読んだ後、サイト自体は変更されません。 したがって、ニュースの有無に追加のフラグ変数を導入します。ニュースが表示されるとすぐに、変数が変更され、ユーザーが応答し、ボタンを介してサイトを開くと、このフラグがクリアされるまで、すべてのリクエストの期間中、この状態が維持されます。



次に、コードの追加について説明します。



 var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);
      
      



GIF、BASE64、R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv /////////////////////////////// YH / C05FVFNDQVBFMi4wAwEAAAAh + QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk / var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



QQBCgAPACwAAAAAEAAQAAAESPDJ + YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk / J8LqUPg + FRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk / J8LqWPw + FRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk / J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk / J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh + QQBCgAPACwAAAAAEAAQAAAESPDJ + YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk / J8LqUPgeBRhV6 var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



; var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



PNG、BASE64、iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA + f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI / axRRFMXvve / NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF / Vth1dl1IMjtmd17ezFyLkQhq4 + 0U / A73nMsB + M9BAJBZ2XetL11OA / + LEEgWtVZb / iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N / UZe5Kzr5oVx5V / M8 + mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG / Dy1ない/ PZ8ezKPH4w7FyVelO6cyVu + D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN + ZUU6mmUg2FAs3zJiAAggT + FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n + 5SiqVdTyw var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



/ a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw / iAaKtOh + 7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF / L / fnAIYyDbro6Ua2AAAAAElFTkSuQmCC「。 var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



PNG、BASE64、iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA + f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK / aipREMbPnDNn / YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI / 3YXXNTsuntusVzhkupON / Ab5vu + GUL + s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA / C4fDT01OlUvFpAPA5vxV / y3XdTqfz / v6OuVwumUx2u935fI6IjDFEpJRSSq / DlNJsNlsqlTRNw1gsNh6Px + NxoVDIZrOMse / vb13XHx4erqoGg0E + N9 / v95IkUUqp4zjxeLxWq + 33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74 / H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4 + PmYymX6 / var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



+ DwcB1Xbi5ualWq41GIxKJ / Pz8WJZ1Op0cx2GMBQIBRFRV9fn5 + XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20 + l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5 + 3j8DAOp7HG​​ipYoAdAAAAAElFTkSuQmCC「。 var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);



PNG、BASE64、iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA + f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV + nSHyCJhyAMBGXNX2yoyIqJG26u6 + gqszUzzszuzPfbYVUKuvRuH3iP93mPB / CfQAAQFsXBeLwjHOb / YhCE6iidzuVWNM3nHEUk6UN // 4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI + nolGRkPlC4YdpPk0mr7 + aymbvx2IHhiFTiinGju + 3hkKP + / oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr + 65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq + nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8 + VleX399fj4xuQk7O9PpNMAwDivZWecAwCt + D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc / K5WPGxtmtSptb587ju66JccRMVZHR / ORQ + 93d6nteQ2i6Pr + 5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk var pageURL = "http://www.nikse.dk/"; var keyElementXPath = "/html/body/table/tbody/tr/td[2]/table/tbody/tr[1]/td[3]/a"; var delay = 20 * 1000; var interval = 60 * 60000; var imgThrobber = "data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7"; var imgNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJKSURBVHjalJI/axRRFMXvve/NzO7M7oaQNe5uig2aSExIiPgRFBttkhCihfkCYmNjY6NgYyWIlYWFVjFFIKRIHwNCMIkiZCF/Vth1dl1IMjtmd17ezFyLkQhq4+0u/A73nMsB+M9BAJBZ2XetL11OA/+LEEgWtVZb/iefI0aZk6PPR4uzRY4ZAJAw4ZIVGDhmYOCQdx7u1N/UZe5Kzr5oVx5V/M8+mYQSySQUCPRbjAKz49nCdKG12pJWwfI2PG/Dy1/PZ8ezKPH4w7FyVelO6cyVu+D2XO0J6oFIC0KBsYpTpVT5XjmoB8pVl55cQolzN+ZUU6mmUg2FAs3zJiAAggT+FQsQgloQtsP62zpZ1Ib26fdTjlkfaTTw7BpxxIAQfAsai42BuwNjL8dYM0qchMnCTKE4W8yMZFDgWR4ZBzEAyJwEhP1n+5SiqVdTyw+W12Ct+qKaPAoSmBOBjpGQLCrMFFIDKTKp0qlwzBMwsT69nnDuOzfxDAzCGXLsC7b30evsdYAh9MPmUjPqRNvedngchl6oDzUZNH9zfnN7s7nUlLGKhSNY80nlpFvtUorIJDKpvdW2Sla6nHaGnPJEeaWz0lptRSeR1EfaGXb6b/XrQ525nLGH7NxkbiQ3YoPtgXegDoJasPd+r/a65i64HDKa58zS7dLw42Gj14g6kT7S0Y8oVjFKFLZAAxuLjd2nu6xZexoYEADMvGn0GlbRGrw/iAaKtOh+7ba32v4Xv1vtqobiiDnkP1tLFiVfMvOmsAVKRIF/l/fnAIYyDbro6Ua2AAAAAElFTkSuQmCC"; var imgNoNews = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAI4SURBVHjalJK/aipREMbPnDNn/YMYdGWJgiLRIqWVhYqB1PoG1nkKX8E3ECysEtLZGUgKt14RQiAoKiKI/3YXXNTsuntusVzhkupON/Ab5vu+GUL+s4AQEgqFCoWCoihCiN8EpZRzrmnabDbzPA/C4fDT01OlUvFpAPA5vxV/y3XdTqfz/v6OuVwumUx2u935fI6IjDFEpJRSSq/DlNJsNlsqlTRNw1gsNh6Px+NxoVDIZrOMse/vb13XHx4erqoGg0E+n9/v95IkUUqp4zjxeLxWq+33e13XG40GY6xer5umaZqmYRiU0lgsBgAAgEII3xYA7Ha74/H48fHBObdt2zRNIYRlWYh43Yae5wGAruuqqj4+PmYymX6/zxhLJBLlcpkQ8vn5OZlMrn7Qtm1CSDgcBoDX11dJkprNZqvVWq1WvV7PD8qn/dzQdV0A4JyXy2VZlhFxu90KIWRZLpVKPqeqqq9ZCIH+nGEYLy8viqJwzkejkeM47XbbP4vneYqiFIvFr68vy7LQcZxgMHi5XJbL5Xq9liQJERFxOp3KsqwoSjKZvL+/n0wmmqadz2e0LCuVShWLxcPhkE6nU6nU3d3d7e0tItq2bRjGbrcbDodvb2+DwcB1Xbi5ualWq41GIxKJ/Pz8WJZ1Op0cx2GMBQIBRFRV9fn5+XK5HI9HIQQQQqLRaCQSicfj9XodESVJ2mw20+l0sVis12vDMDzPc13336cF4Jz7KUWj0UAgwBijlP5+3j8DAOp7HGipYoAdAAAAAElFTkSuQmCC"; var imgErrorOrTimeout = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAJtSURBVHjalFLPSxRxHP18f8zMOuu67JCLm4m2omzMIthhQaxDXjwKHuzSRZEgQoigg9AtqINIV+nSHyCJhyAMBGXNX2yoyIqJG26u6+gqszUzzszuzPfbYVUKuvRuH3iP93mPB/CfQAAQFsXBeLwjHOb/YhCE6iidzuVWNM3nHEUk6UN//4PeXuAcAAChS2Lt5BwYA87B817Mzr7d2qL3YjFVUd7MzKyfnkqECBhLhBCECEL4SkwxTkWjI4nEdC5HbwWDi8XiYrE4GI+nolGRkPlC4YdpPk0mr7+aymbvx2IHhiFTiinGju+3hkKP+/oODCNvGGNDQwLGbcPDR5Z1ZFmHpkkQaqmvxwhhhCjjvBYLEPr+65fuuvL8fIAQsO2CaXKAkm1LhFy7UZ9zjFDeMD6trT3r6sKq+nluTsAYWloedncDQHpvL318DFcaeuF5ABCRJIzQ8+VleX399fj4xuQk7O9PpNMAwDivZWecAwCt+D4CCBDSn0q1hUISIZDPM86huXkkkQAADvBuZwdEESPEOCeqotyJRL5oWkHTGOc/K5WPGxtmtSptb587ju66JccRMVZHR/Orq+93d6nteQ2i6Pr+5tnZt3JZplQiRMR4WdNuNzR0hMOqopCeHshkpnM5o1qlZ46TVJRHnZ0nFxd3GxuTihJNJKC9HQQBbBs0DQ4PzxcWJjY3p7LZKmPoZjD4RFVfDgyAooBlga6DYfiVCqEUZBkEYSaTGVtacn1fd93LAppk+UYg0BoKvUqlJEJkSvfK5ZWTk6+l0q6uFyzLY6zK2F+TxAjVUVprqUmW6wVBwJhcD/EP/B4AKOgP3B2vzLEAAAAASUVORK5CYII="; var btn = this; var parser = new DOMParser(); var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefBranch = prefService.getBranch("cb_storage."); var supportsString = Components.interfaces.nsISupportsString; var uStr = Components.classes["@mozilla.org/supports-string;1"].createInstance(supportsString); function clickBtn(event) { if (event.button == 0) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); getDoc(pageURL, true); } else if (event.button == 1) { event.preventDefault(); window.clearInterval(checker); checker = window.setInterval(getDoc, interval, pageURL, true); var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); previousStat.isNew = false; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + previousStat.commentsInfo); if (gBrowser.selectedBrowser.currentURI.spec == "about:blank" && !gBrowser.selectedBrowser.webProgress.isLoadingDocument) { gBrowser.selectedBrowser.loadURI(pageURL); } else { gBrowser.selectedTab = gBrowser.addTab(pageURL); } } } function getDoc(pageURL, pureXHR) { btn.image = imgThrobber; var xhr = new XMLHttpRequest(); xhr.mozBackgroundRequest = true; xhr.open("GET", pageURL, true); xhr.timeout = 3000; xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE; xhr.channel.QueryInterface(Components.interfaces.nsIHttpChannelInternal) .forceAllowThirdPartyCookie = true; if (pureXHR) { xhr.responseType = "document"; xhr.onload = function() { processDoc(this.responseXML); } xhr.ontimeout = function() { getDoc(pageURL, false); } } else { xhr.onload = function() { processDoc(parser.parseFromString(this.responseText, "text/html")); } xhr.ontimeout = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Timeout"); } } xhr.onerror = function() { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " HTTP error"); } xhr.send(null); } function processDoc(doc) { var keyElement = doc.evaluate(keyElementXPath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (keyElement) { var previousStat = JSON.parse(prefBranch.getComplexValue("Subtitle_Edit", supportsString).data); if (previousStat.pageURL != keyElement.href || previousStat.commentsInfo != keyElement.textContent || previousStat.isNew) { previousStat.pageURL = keyElement.href; previousStat.commentsInfo = keyElement.textContent; previousStat.isNew = true; uStr.data = JSON.stringify(previousStat); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); btn.image = imgNews; btn.tooltipText = ((new Date()).toLocaleString() + " News: " + keyElement.textContent); } else { btn.image = imgNoNews; btn.tooltipText = ((new Date()).toLocaleString() + " No news: " + keyElement.textContent); } } else { btn.image = imgErrorOrTimeout; btn.tooltipText = ((new Date()).toLocaleString() + " Parsing error"); } } if (!prefBranch.prefHasUserValue("Subtitle_Edit")) { uStr.data = JSON.stringify({"pageURL": "", "commentsInfo": "", "isNew": false}); prefBranch.setComplexValue("Subtitle_Edit", supportsString, uStr); prefService.savePrefFile(null); } btn.addEventListener("click", clickBtn, true); btn.onDestroy = function() { btn.removeEventListener("click", clickBtn, true); } window.setTimeout(getDoc, delay, pageURL, true); var checker = window.setInterval(getDoc, interval, pageURL, true);







, : . , ( , ). (***ComplexValue), .



( , JSON, , ).



. , ( , : , , ). , . , , , .



, : , . ( ), , .



, -, . XPath . . , .



: , , (, ) . Firefox Custom Buttons.



, . )



All Articles