*V2Cスクリプトリファレンス [#dce14ebb]
#contents
**v2cオブジェクト [#qe2986ab]
V2Cとのやりとりに使用します

|~型|~プロパティ|~説明|
|contextオブジェクト|context|contextオブジェクトを取得します。代入はできません。systemスクリプトから開いた場合はundefinedが返ります|
|historyオブジェクト|history|historyオブジェクトを取得します。閲覧履歴を参照することができます。|
|お気に入りタブコレクションオブジェクト|favorites|お気に入りタブコレクションオブジェクトfvsにを返す。お気に入り全体に関する操作をすることができます|
|boardオブジェクト[]|boards|V2Cに登録されている全板オブジェクトのArrayを返します|
|java.io.File|appDir|ランチャーのフォルダ(JWS版またはJARファイル直接起動の場合はnull)|
|java.io.File|saveDir|V2C保存用フォルダ|
|レスペインオブジェクト|resPane|現在選択されているレスペインオブジェクトを返す(2ペインモードでもnullではない)|
|String|status|ステータスバーの文字列を取得します(代入により設定可能)|
|bbsオブジェクト|bbs2ch|2chのBBSオブジェクトを返す|
|bool|online|V2Cがオンライン状態の時にtrueを返す|
|bool|interrupted|外部からの中断要求(スレ一覧用スクリプトでユーザによる停止ボタンのクリック等)があった時にtrueを返す&br;余談:内部的にはThread.currentThread().isInterrupted()を返しているだけです。)|
|レスラベルオブジェクト[]|resLabels|V2Cで設定されているレスラベルのArrayを返します|
|bool|compSoundEnabled|更新完了音を再生する設定がオンの時にtrueを返します。|
|String|clipboardText|クリップボードの文字列を取得します。スクリプトにはクリップボードへのアクセス許可が必要です。(${SCRIPT:Tc})|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|beep()|Beep音を鳴らす|
|void|setStatus(String s)|ステータスバーにメッセージを表示する。スクリプトの実行が終了するとメッセージはクリアされるので、実行後もメッセージを残したい場合はv2c.context.setStatusBarText(s)を使用する。&br; v2c.status = sと同等|
|void|alert(String s)|ダイアログでメッセージsを表示する|
|bool|confirm(String s)|文字列sを「OK」・「Cancel」ボタン付きのダイアログに表示し、「OK」ボタンによりダイアログが閉じられた時のみtrueを返す|
|void|print(String s)|sをスクリプトコンソールに追加する。(「表示」メニューの「スクリプトコンソール…」でスクリプトからのメッセージを出力するためのウィンドウが開く。スクリプトコンソールが開いていない時のメッセージは無視される。)|
|void|println(String s)|sをスクリプトコンソールに追加した後改行する。(同上)|
|String|prompt(String s,String v)|文字列sの下に初期値vの入力欄を表示し、「OK」ボタンによりダイアログが閉じられた時のみ入力欄の値を文字列として返す(その他の場合はnull)|
|>|>| |
|void|exit()|V2Cを終了する。&br;(スクリプトにV2C終了の許可が必要です。(${SCRIPT:Rx})|
|void|restart()|V2Cを再起動する。再起動できない場合はそのまま制御を返す。&br;(スクリプトにV2C終了の許可が必要です。(${SCRIPT:Rx})|
|void|exec(String s)|文字列sをコマンドラインとして実行します。&br;WindowsのFirefoxで2chのHPを表示させる例:&br;v2c.exec('"C:\\Program Files\\Mozilla Firefox\\firefox.exe" http://www.2ch.net/');|
|void|exec(String[] l)| lを引数のArrayとして実行します。lの最初の要素は実行ファイルへのパスを指定してください。&br;WindowsのFirefoxで2chのHPを表示させる例:&br;v2c.exec(['C:\\Program Files\\Mozilla Firefox\\firefox.exe','http://www.2ch.net/']);&br;空白を含むパスを使用する場合は空白で区切られてしまうなど意図しない動作になる場合があるのでこちらのメソッドを推奨します。|
|void|exec(String s)|文字列sをコマンドラインとして実行します。&br;WindowsのFirefoxで2chのHPを表示させる例:&br;v2c.exec('"C:\\Program Files\\Mozilla Firefox\\firefox.exe" http://www.2ch.net/');|
|void|exec(String[] l)| lを引数のArrayとして実行します。lの最初の要素は実行ファイルへのパスを指定してください。&br;WindowsのFirefoxで2chのHPを表示させる例:&br;v2c.exec(['C:\\Program Files\\Mozilla Firefox\\firefox.exe','http://www.2ch.net/']);&br;空白を含むパスを使用する場合は空白で区切られてしまうなど意図しない動作になる場合があるのでこちらのメソッドを推奨します。|
|>|>| |
|boardオブジェクト|getBoard(java.net.URL u, String n)|URLがuの板がV2Cに登録されている場合その板の板オブジェクトを返す。(v2c.getBoard(u)と同じ。)&br;uが板のURLとして登録されてない場合はURLがuで名前がnの板を新規に作成して返す。&br;※uが外部板のURLの以外の場合は板を新規作成してくれないようです)|
|threadオブジェクト|getThread(java.net.URL u, String t, Integer n)|V2CがuをスレッドのURLと認識できる場合に対応するスレッドオブジェクトを返す。&br;(t、nは省略可)&br; t … thのスレタイが不明の場合スレタイとして使用される(デフォルト値null)&br; n … thのレス数がn以下の場合レス数として使用される(デフォルト値0)&br;主に未取得スレッドのdatインポート用。|
|boardオブジェクト|getLocalBoard(String d)|フォルダ名がdのローカル板オブジェクト(該当するローカル板が存在しない場合はnull)を返します|
|resオブジェクト(セパレータオブジェクト)|createResSeparator(String s)|レスとレスの間に文字列sを表示するセパレータオブジェクトを作成します。&br;セパレータオブジェクトは下のboard.createLocalThread(st,rl)で使用します。&br;セパレータオブジェクトsepが表示する文字列はsep.text・sep.setText(s)で取得及び設定することができます。&br;注意:表示文字列中のタブコードと改行はスペースに置換されます。|
|>|>| |
|String|getSelectedText()|選択テキストを取得|
|String|replaceSelectedText(String s)|キーボードフォーカスを持つテキスト入力コンポーネントの選択テキストを置換文字列sで置換。|
|void|reloadSettringFile(String s)|ファイル名sの設定ファイルを再読み込みする。&br;現在再読み込みできるのは&br;'samba24.txt', 'msgkw.txt', 'AAList.txt',&br;'ImageViewURLReplace.dat', 'ReplaceStr.txt',&br;'ReplaceStr_Tw.txt', 'URLExec.dat', 'URLExec2.dat',&br;'URLExec3.dat', 'NGBE.txt'で、&br;'samba24.txt'は2chの'samba24.txt'を再読み込みする。&br;例:v2c.reloadSettingFile('ImageViewURLReplace.dat')|
|void|reloadSystemScript(String s)|ファイル名sのシステム系スクリプトを再読み込みする&br;例:v2c.reloadSystemScript('menu.js')|
|レスラベルオブジェクト|getResLabel(String sn)|名前がsnのレスラベル(存在しない場合はnullを返します|
|>|>| |
|>|>|''オブジェクト記憶メソッド''&br; 以下の関数はスクリプトファイルのパスに関連付けられており、&br; スクリプトの内容を変更してもスクリプトのパスを変更しない限り同じオブジェクトを参照することができます。&br; オブジェクトが記憶されるのはV2Cが終了するまでの間です。グローバル変数のような感じで使えます|
|~戻り値|~メソッド|~説明|
|void|setScriptObject(Object v)|オブジェクトvを設定する|
|Object|getScriptObject()|setScriptObject(v)で設定されたオブジェクトvを返す|
|Object|putProperty(String s, Object v)|キーsに対してオブジェクトvを保存する。&br;2回目以降の呼び出し時は、保存されたオブジェクトを返して、新しいオブジェクトvを保存する動作に変わる。初回、またはremoveProperty後はnullが返る|
|Object|getProperty(String s)|キーsに対応するオブジェクトを返す|
|Object|removeProperty(String s)|キーsに対応するオブジェクトを保存する。&br;2回目以降の呼び出し時は、保存されたオブジェクトを返して、削除する動作に変わる。初回、またはremoveProperty後はnullが返る|
|>|>| |
|>|>|''ネットワーク接続に関するメソッド''&br; openURL以下の関数はスクリプトに外部へのネットワーク接続の許可が必要です。(${SCRIPT:S})|
|~戻り値|~メソッド|~説明|
|java.net.URL|expandShortURL(java.net.URL u, bool r)|URL uが短縮URLと思われる場合は展開し、&br;それ以外の場合はuを返す。rの値により以下のように動作する:&br; true … V2C内部にURLを展開した結果のキャッシュが存在しない場合はネットワーク接続により展開する。注意:展開が終了するまでv2c.expandShortURL(u,true)はブロックします。展開にはスクリプトに外部へのネットワーク接続の許可は不必要です。&br; false … V2C内部のURLを展開した結果のキャッシュのみを参照する。|
|String|readURL(java.net.URL u)|u(URL文字列)の内容を取得する。プロトコルがHTTPでContent-Typeが"text/"で始まっている場合のみ内容が文字列として返される。例外的にパーミッション無しで利用可能。Content-Lengthが不明の場合のダウンロード上限は16MB。|
|HttpRequestオブジェクト|createHttpRequest(java.net.URL u)|URLuをGETするHttpRequestオブジェクトを作成する。|
|HttpRequestオブジェクト|createHttpRequest(java.net.URL u,String d)|URLuに対してデータdをPOSTするHttpRequestオブジェクトを作成する。(dはそのまま送信されるので適切にencodeされている必要がある。)|
|void|openURL(java.net.URL u, bool bu, bool bnt, bool bbg)|URL u が板またはスレッドのURLの時にスレ一覧またはレス表示欄で開きます。&br;bu: trueの時更新する&br;bnt: trueの時新タブで開く&br;bbg: trueの時裏で開く。&br;bu, bnt, bbgは省略可。デフォルト値はそれぞれtrue, true, false。|
|void|browseURL(java.net.URL u)|URL u をブラウザで開く。JDICがインストールされている時は内部ブラウザで開く。|
|void|browseURLExt(java.net.URL u)|URL u を外部ブラウザで開く。|
|void|browseURLDefExt(java.net.URL u)|URL u をデフォルト外部ブラウザで開く|
|>|>| |
|>|>|''ファイルパス取得関連メソッド''|
|~戻り値|~メソッド|~説明|
|java.io.File|getScriptDataFile(String fn)|スクリプトがデータを保存するためのパス(ファイル名はfn)をJavaのFileオブジェクトとして取得する。ファイルの場所はスクリプトフォルダ内の"scdata"フォルダ。|
|java.io.File|getScriptSubFile(String n)|スクリプトファイル名から拡張子を除いたフォルダ内の名前nのファイルパスをjavaのFileオブジェクトとして返します。&br;注意:スクリプトファイル名が'.'(ピリオド)を含まない場合やスクリプトファイル名が拡張子のみの場合はnullを返す。&br;例: V2C\script\test.js から実行した v2c.getScriptSubFile('state.txt') は V2C\script\test\state.txt に相当するFileオブジェクトを返す|
|>|>| |
|>|>|''ファイル・フォルダ操作関連メソッド''(ファイル読み込みの許可が必要 ${SCRIPT:Frw})|
|~戻り値|~メソッド|~説明|
|bool|copyFileInfo(java.io.File f, java.io.File d)|ファイルfをフォルダdにコピーし、成功した場合trueを返します。フォルダdが存在しない場合には作成します。)|
|bool|copyFile(java.io.File f0, java.io.File f1)|ファイルf0をファイルf1にコピーし、成功した場合にtrueを返します|
|>|>| |
|>|>|''ファイル読み込み関連メソッド''(ファイル読み込みの許可が必要 ${SCRIPT:Fr})|
|~戻り値|~メソッド|~説明|
|String|readFile(Java.io.File f,String c)|ファイルfを文字コードcのテキストファイルとして読み込んだ結果の文字列を返す。&br;cを省略した場合、文字コードは適当に推測|
|String|readStringFromFile(java.io.File f,String c)|readFile(f,c)と同じ|
|String[]|readLinesFromFile(java.io.File f,String c)|ファイルfを文字コードcのテキストファイルとして読み込んだ結果の文字列を改行で分割したArrayを返す(各行末の改行コードは削除される)&br;cを省略した場合、文字コードは適当に推測、各行末の改行コードは削除される|
|byte[]|readBytesFromFile(java.io.File f)|ファイルfの内容をバイト列として返す|
|>|>| |
|>|>|''ファイル書き込み関連メソッド''&br;(ファイルが既に存在する場合は上書きされる。安全のためV2C保存用フォルダ(v2c.saveDir)直下のファイルへの書き込みはエラーになる。ファイル書き込みの許可が必要 ${SCRIPT:Fw})|
|~戻り値|~メソッド|~説明|
|void|writeStringToFile(java.io.File f,String s,String c)|ファイルfに文字列sを文字コードcで書き込む。(cを省略した場合文字コードはデフォルトの文字コード。)|
|void|writeLinesToFile(java.io.File f,String[] sl,String c)|ファイルfに文字列のArrayslを文字コードcで書き込む。cを省略した場合、デフォルトの文字コードとなる。(各行末には改行コードが追加される。)|
|void|writeBytesToFile(java.io.File f,byte[] bl)|ファイルfにバイト列blを書き込む。|

**historyオブジェクト [#f49f3630]
注意:履歴にスレッドが存在しない場合もlengthが0のArrayを返す。
|~型|~プロパティ|~説明|
|threadオブジェクト[]|threads|レス表示履歴に存在するスレッドオブジェクトをJavaのArrayとして返す|
|threadオブジェクト[]|postThreads|レス表示履歴に存在する書き込んだことのあるスレッドオブジェクトをJavaのArrayとして返す|

**contextオブジェクト [#e27cd660]
コマンドの実行に必要な情報を取得します。&br;
※ユーザーではなくV2C本体から呼ばれるsystemスクリプトではcontextオブジェクトは使用できません。

|~型|~プロパティ|~説明|
|String|commandLabel|スクリプトを起動したコマンドのラベル(ポップアップメニューに表示されている文字列)を取得できます。|
|String|argLine|外部コマンド設定のスクリプトファイル名(とその後の空白)より後の文字列。(nullを返さずに""を返す。)&br;スクリプト独自の引数を用意してユーザーに指定させてスクリプトの動作を変更させたい場合に使用します。|
|String[]|args|v2c.context.argLineを分割して作成した引数のArray(引数が存在しない時はnullを返さずにargs.length==0のArrayを返す。)|
|resオブジェクト|res|ポップアップメニューを表示した、またはマウスジェスチャを開始したレスオブジェクト &br;スレッド全体ではなく実行した場所のレス単体に対して処理したい場合に使います。|
|threadオブジェクト|thread|スレッドに関する情報を保持するオブジェクト |
|linkオブジェクト|link|リンクコマンドの対象リンクオブジェクト |
|linkオブジェクト[]|links|選択テキストに含まれるリンクオブジェクトのArray|
|String|selText|レス表示欄のユーザーが範囲指定した選択範囲のテキスト|
|Integer[]|filteredResIndex|スクリプトが起動された時にレス表示欄に表示されていたレスのレス番号Array&br;表示範囲内のレスではなくレス表示欄全体のレスが対象|
|Integer[]|checkedResIndex|スクリプトが起動された時にレス表示欄でチェックされていたレスのレス番号Array|
|java.awt.Point|mousePos|スクリプト開始時のマウスポインタ位置をJavaのPoint pとして返します。X,Y座標はp.x,p.yです。|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|setStatusBarText(String text)|スクリプトの実行終了後に文字列textをステータスバーに表示|
|void|setClipboardText(String text)|スクリプトの実行終了後に文字列textをクリップボードにコピー|
|void|setPopupText(String text)|スクリプトの実行終了後に文字列textをポップアップ表示|
|void|setPopupHTML(String text)|スクリプトの実行終了後に文字列textをHTMLとしてポップアップ表示する。&br;注意:一部のGIFファイルを表示する時にCPU使用率が上昇したままになるという問題があります。&br;例:"<html><body>あああ</body></html>"|
|void|setPopupFocusable(bool)|2c.context.setPopupFocusable(true)を実行するとsetPopupText(text)・setPopupHTML(text)で表示したポップアップでキーボード入力ができるようになる。&br;また、ポップアップの文字列を選択、ドラッグができるようになります。&br;ポップアップで文字列が選択されている場合、ポップアップメニューから選択テキスト用外部コマンドを実行できます(注:v2c.context.threadはnullになってます)&br;主にsetPopupHTML(s)で表示したフォームにキーボード入力する場合を想定している。 |
|void|setMaxPopupWidth(Integer size)|v2c.context.setPopupText(text)・v2c.context.setPopupHTML(text)のポップアップの最大幅をsizeに設定する |
|void|setRedirectURL(bool)|スクリプト内で関数redirectURL(u)を定義しておきv2c.context.setRedirectURL(true)を実行すると、&br;HTMLポップアップでリンクをクリックした時にredirectURL(u)(uはjavaのURLオブジェクト)が呼ばれます。&br;redirectURL(u)がjavaのURLオブジェクトまたはURL文字列を返した場合に限りそのURLがWebブラウザで開かれます。&br;redirectURL関数内で更にsetRedirectURL(true);を指定して多段ポップアップさせたい場合。setPopupHTMLに渡すHTML文字列中のリンクタグは絶対パスで指定しないとポップアップしてくれません&br;× <a href="/img/sample.gif">テスト</a>&br;○ <a href="&#104;ttp://www.v2c.com/img/sample/gif">テスト</a>|
|void|setTrapFormSubmission(bool)|スクリプト内で関数formSubmitted(u,sm,sd)を定義しておき&br;v2c.context.setTrapFormSubmission(true)を実行すると、&br;HTMLポップアップでフォームを送信した時にformSubmitted(u,sm,sd)が呼ばれます。&br;フォームの送信処理は自動ではしてくれません。formSubmitted関数内でcreateHttpRequest等で自前でPOSTリクエストを送信する必要があります|
|void|closeOriginalPopup()|formSubmitted(u,sm,sd)内でv2c.context.closeOriginalPopup()を実行すると&br;呼び出し元のポップアップウィンドウを閉じる。&br;元のポップアップが既に閉じられている場合でもエラーにはならない|
|void|setFilteredRes(resオブジェクト[] resArray)|スクリプトの実行終了後resArrayで与えられたレスオブジェクトの列をレス表示欄で抽出して表示する。(レスは番号でソートした後重複を除いたものが表示されます。)&br;レスポップアップからも実行可能です|
|void|setFilteredResIndex(Integer resIndex)|スクリプトの実行終了後resIndexで与えられた数字列をレスのインデックスとしてレス表示欄で抽出して表示する。(同上)|
|void|setPopupRes(resオブジェクト[] resArray)|resArrayで与えられたレスオブジェクトの列をスクリプトの実行終了後ポップアップ表示する。(同上)|
|void|setPopupResIndex(Integer resIndex)|resIndexで与えられた数字列をレスのインデックスとしてスクリプトの実行終了後ポップアップ表示する。(同上)|
|void|setPostMessage(String text)|スクリプトの実行終了後書き込み欄が開いていない場合は開き、書き込み欄の内容を文字列sで置き換える(レスポップアップからも実行できます)|
|void|insertToPostMessage(String text)|スクリプトの実行終了後書き込み欄が開いていない場合は開き、書き込み欄のカーソル位置に文字列textを挿入する(レスポップアップからも実行できます)|
|void|setResToJump(resオブジェクト res)|スクリプトの実行終了後レスオブジェクトresのレスを表示する|
|void|setResIndexToJump(Integer resIndex)|スクリプトの実行終了後インデックスがresIndexのレスを表示する|
|void|setResPaneText(String caption, String targetTabName, bool b)|スクリプトの実行終了後に文字列captionをレス表示欄のタブ(タブ名targetTabName)に表示します。&br;bは省略可能で、true(デフォルト)の時に新しいタブで表示します。|
|void|setResPaneHTML(String caption, String targetTabName, bool b)|スクリプトの実行終了後に文字列captipnをHTMLとしてレス表示欄のタブ(タブ名targetTabName)に表示します。&br;bは省略可能で、true(デフォルト)の時に新しいタブで表示します。&br;注意:一部のGIFファイルを表示する時にCPU使用率が上昇したままになるという問題があります。|
|void|closeOriginalPanel()|redirectURL(u)・formSubmitted(u,sm,sd)内でv2c.context.closeOriginalPanel()を実行すると呼び出し元のレス表示欄タブまたはポップアップウィンドウを閉じる。&br;元のレス表示欄タブまたはポップアップが既に閉じられている場合でもエラーにはならない。|
|void|setPopupID(String idName)|setPopupTextやsetPopupHTMLで表示するポップアップにID文字列 idName を設定します。|
|ダミーオブジェクト|getPopupOfID(String idName)|ID idName が設定されたポップアップが表示中の場合はダミーオブジェクトを、表示していない場合はnullを返します。&br;注意:将来はダミーオブジェクトではなくポップアップに関する情報を保持するオブジェクトを返す可能性があります。|
|void|setCloseOnMouseExit(bool)| trueを指定するとsetPopupTextやsetPopupHTMLで表示されたポップアップからマウスを外した時にそのポップアップを閉じます。|
|void|setDefaultCloseOnMouseExit(bool)|setCloseOnMouseExit(bool)のデフォルト値を設定します。スクリプトのどこかで一度実行しておくと、以後同じ値bのsetCloseOnMouseExit(bool)を実行する必要がありません。|
|void|setCloseOnLinkClick(bool)|boolがfalseの時setPopupHTML()で表示したポップアップのリンクをクリックした時にそのポップアップを閉じません。(デフォルトはtrue。)&br;またboolがfalseの時redirectURL()によるポップアップはマウスポインタの位置に表示されます。|
**お気に入りタブコレクションオブジェクト(fvs) [#p99ba0ba]
v2c.favoritesが返すオブジェクトfvsによってお気に入り全体に関する操作をすることができます。

|~型|~プロパティ|~説明|
|Integer|count|お気に入りタブの総数|
|>|>| |
|~戻り値|~メソッド|~説明|
|お気に入りタブオブジェクト|getFavorite(Integer i)|インデックスがiのお気に入りタブオブジェクトを返す|
|お気に入りタブオブジェクト|createFavorite(String n)|名前がnのお気に入りタブを作成する|

**お気に入りタブオブジェクト(fav) [#p5c55a13]
fav.appendItem(f,o), fav.insertItem(f,o,i), fav.removeItem(o)のoにはお気に入りアイテム・板・スレッドオブジェクトを使用できます。&br;お気に入りの追加、削除に類する関数を使用するスクリプトにはお気に入り変更の許可が必要です。(${SCRIPT:Vf})

|~型|~プロパティ|~説明|
|String|name|お気に入りタブの名前|
|お気に入りアイテムオブジェクト|root|お気に入りタブのルートフォルダオブジェクト(お気に入りアイテムオブジェクト)を返す。&br;ルートフォルダ名としても扱える|
|>|>| |
|~戻り値|~メソッド|~説明|
|bool|contains(お気に入りアイテムオブジェクト o)|oがお気に入りアイテムオブジェクトまたは板またはスレッドオブジェクトでfavがoを含む場合にtrueを返す|
|>|>|''お気に入りアイテム追加・削除の関数'' (要:${SCRIPT:Vf}&br; お気に入りの追加、削除に類する関数を使用するスクリプトにはお気に入り変更の許可が必要です。(${SCRIPT:Vf})|
|void|removeAll()|お気に入りタブの内容をルートフォルダのみ残して全て登録解除する|
|void|clearFolder(String f)|お気に入りフォルダfの内容を空にする|
|お気に入りアイテムオブジェクト|appendFolder(お気に入りアイテムオブジェクト o, String s)|お気に入りフォルダfに名前がsのフォルダを追加し、追加したフォルダオブジェクトを返す|
|お気に入りアイテムオブジェクト|insertFolder(お気に入りアイテムオブジェクト f, String s, Integer i)|お気に入りフォルダfのインデックスiに名前がsのフォルダを挿入し、挿入したフォルダオブジェクトを返す。|
|お気に入りアイテムオブジェクト|appendItem(お気に入りアイテムオブジェクト f, お気に入りアイテムオブジェクト o)|お気に入りフォルダfにoを追加する|
|お気に入りアイテムオブジェクト|insertItem(お気に入りアイテムオブジェクト f, お気に入りアイテムオブジェクト o, Integer i)|お気に入りフォルダfのインデックスiにoを追加する|
|void|removeItem(お気に入りアイテムオブジェクト o|oの登録を解除する|

**お気に入りアイテムオブジェクト(o) [#n31eedd9]

|~型|~プロパティ|~説明|
|String|label|アイテムの名前|
|Integer|childCount|oがフォルダの場合はフォルダに含まれるアイテムの総数を、それ以外の場合は-1を返す|
|boardオブジェクト|board|oが板の場合は板オブジェクトを、それ以外の場合はnullを返す|
|threadオブジェクト|thread|oがスレッドの場合はスレッドオブジェクトを、それ以外の場合はnullを返す|
|>|>| |
|~戻り値|~メソッド|~説明|
|お気に入りアイテムオブジェクト|getChild(Integer i)|oがフォルダの場合はインデックスiの子アイテムを、それ以外の場合はnullを返す|

**bbsオブジェクト(bbs) [#ic20839e]

|~型|~プロパティ|~説明|
|bool|is2ch|BBSが2ch、bbspinkの時にtrueを返します|
|bool|is2cheq|BBSが2ch互換の時にtrueを返します|
|bool|shitaraba|BBSがしたらばの時にtrueを返します|
|bool|machi|BBSがまちBBSの時にtrueを返します|
|bool|twitter|BBSがTwitterの時にtrueを返します|
|>|>| |
|~戻り値|~メソッド|~説明|
|boardオブジェクト|getBoard(key)|bbsが2chの場合、板キーがkeyの板オブジェクトを返す。&br;板が存在しない時または2ch以外のBBSではnullを返す。&br;(例:v2c.bbs2ch.getBoard('software'))|

**boardオブジェクト(bd) [#yeafa324]

|~型|~プロパティ|~説明|
|bbsオブジェクト|bbs|板オブジェクトboardからBBSオブジェクトを返します。|
|java.net.URL|url|板のURL|
|String|name|板名|
|String|key|板キー (板キーをparseIntで数値型に変換して1000倍するとスレ立ち時間(ミリ秒)が分かります)|
|String|anonymousName|SETTING.TXTに設定されている名無し(存在しない場合は空文字列)|
|String|allAnonymousName|SETTING.TXTに設定されている名無しとユーザが設定した名無しの列(存在しない場合はサイズ0の列)|
|bool|local|板オブジェクトがローカル板の場合trueを返す|
|threadオブジェクト[]|threadsWithLog|板bd内のログのある全スレッドのArray(ログのあるスレッドが無い場合はlengthが0のArray)を返します。|
|java.util.Map|settingMap|板オブジェクトbdのSETTING.TXTをMap mとして返します。&br;(mはnullの可能性があります。)&br;例:2chのソフトウェア板の場合、m.get(null)、m.get('BBS_NONAME_NAME')はそれぞれ"software@soCCCncCosWvo"、"名無しさん@お腹いっぱい。"を返します。|
|>|>| |
|~戻り値|~メソッド|~説明|
|threadオブジェクト|getThread(key)|板オブジェクトbd内のスレッドキーがkのスレッドオブジェクト(該当するスレッドが存在しない場合はnull)を返します。&br;数値又は文字列を指定できますが数値を推奨。&br;8桁未満の場合、板のリロードが出来ない、8桁未満を文字列で渡すと初回にエラーが出る。等問題が出てきます|
|threadオブジェクト|createLocalThread(String title, resオブジェクト resArray)|内容がresArray(レスオブジェクトまたはセパレータオブジェクトを要素とするArray)で&br;スレタイがtitleのスレッドをローカル板bdに作成し、対応するスレッドオブジェクトを返します。&br;注意:スレッドの作成にはスクリプトにファイル書き込みの許可が必要です。(${SCRIPT:Fw})|
|threadオブジェクト|getThread(k, u, t, n)|板bdのスレッドキーkのスレッドを既に取得している場合&br;そのスレッドオブジェクトを返す。(bd.getThread(k)と同じ。)&br;それ以外の場合、uを移転前の板のURLとして新規に作成したスレッドオブジェクトを返す。&br;(uがnullの場合はbdの現在のURLから取得したと見倣す。)&br;スレタイt(デフォルト値null)とレス数n(デフォルト値0)を指定することもできます。&br;u、t、nは省略可|
|void|addNGID(id, d, t, w)|文字列idを板bdのNGIDに追加する。(d、t、wは省略可)&br;d … idが出現した時刻(ミリ秒単位のUNIX TIME)。この時刻を含む日±αでNGIDが有効になる。dが0以下の場合はbd.addNGID(*)を実行した時刻からのオフセットと見做される。(デフォルト値は0)&br;bd.addNGID(id,-86400000); // 昨日のNGIDとして追加する例&br;t … trueの場合透明非表示(デフォルト値はfalse)&br;w … ウェイト(-9≦w≦9、デフォルト値は0)&br;既にidがNGIDに登録されている場合、その設定が &br;wより低い優先度の場合tとwの値が反映される。 &br;wと同じウェイトかつwが0以下かつtがtrueの場合tの値が反映される。(透明非表示になる。)&br;その他の場合tとwは無視される&br;注意:追加したNGIDを既に表示されているレスに適用するにはv2c.resPane.checkNG(bd)を実行してください。&br;注意:非表示・キーワード設定ダイアログが表示されている間bd.addNGID(*)は処理をスキップします。(何もしません。)|

**レスペインオブジェクト(rp) [#w609c090]

|~型|~プロパティ|~説明|
|Integer|columnCount|レス表示欄カラムの数を返す|
|カラムオブジェクト[]|columns|レス表示ペインに表示されているカラムオブジェクトのArrayを返す|
|Integer|selectedColumnIndex|選択されているカラムのインデックスを返す。(代入により設定可能)|
|カラムオブジェクト|selectedColumn|選択されているカラムオブジェクトを返す|
|Integer|tabCount|開いているタブの数|
|Integer|selectedIndex|選択されているタブのインデックス|
|threadオブジェクト|selectedThread|選択されているタブのスレッドオブジェクト|
|threadオブジェクト[]|threads|レス表示ペインに表示されているスレッドオブジェクトのArray(レス表示タブが表示されていない場合はサイズ0のArrayを返す。Arrayの各要素はnullではない。)|
|>|>| |
|~戻り値|~メソッド|~説明|
|threadオブジェクト|getThread(Integer tabIndex)|インデックスtabIndex(最初のタブの0番目と見なされます)のタブに表示されているスレッドオブジェクト|
|void|checkNG()|全てのレス表示タブの非表示を再チェックする。|
|void|checkNG(null)|rp.checkNG()と同じ。|
|void|checkNG(threadオブジェクト th)|スレッドthのレス表示タブが表示されている場合そのレス表示タブの非表示を再チェックする。|
|void|checkNG(boardオブジェクト bd)|板bdに属するスレッドのレス表示タブの非表示を再チェックする。&br;res.addNGID(*)で非表示の再チェックを実行しないようになったので&br;非表示の再チェックが必要な場合はrp.checkNG(bd)を使用してください。|

**カラムオブジェクト(col) [#tb0260ff]
レスペイン内のスレッドタブ群に対してやりとりするためのオブジェクト

|~型|~プロパティ|~説明|
|Integer|tabCount|開いているタブの数|
|Integer|selectedIndex|選択されているタブのインデックス|
|threadオブジェクト|selectedThread|選択されているタブのスレッドオブジェクト|
|threadオブジェクト[]|threads|レス表示ペインに表示されているスレッドオブジェクトのArray(レス表示タブが表示されていない場合はサイズ0のArrayを返す。Arrayの各要素はnullではない。)|
|>|>| |
|~戻り値|~メソッド|~説明|
|threadオブジェクト|getThread(Integer tabIndex)|インデックスtabIndex(最初のタブの0番目と見なされます)のタブに表示されているスレッドオブジェクト|
|void|openThread(th, bu, bnt, bbg)|(カラムの選択状態に関係無く)レス表示欄カラムcolでスレッドthを開きます。&br;bu,bnt,bbgはth.open(bu,bnt,bbg)の引数と同じです。(省略可)&br;注意:スレッドの更新にはスクリプトに外部へのネットワーク接続の許可が必要です。(${SCRIPT:S})|
**threadオブジェクト(th) [#hc94a5fd]
未取得レス数は(th.resCount-th.localResCount)で、スレッド更新前のレス数は(th.localResCount-th.newResCount)で計算できます。
|~型|~プロパティ|~説明|
|boardオブジェクト|bbs|スレッドオブジェクトthreadからBBSオブジェクトを返します。|
|java.net.URL|url|スレッドのURL|
|String|title|スレッドタイトル|
|String|key|スレッドキー|
|java.io.File|localFile|ローカルに保存されたログファイル|
|Integer|localResCount|既得レス数|
|Integer|resCount|localResCount、またはスレッド更新後に更新したスレ一覧にこのスレッドが含まれていた場合はそのレス数|
|Integer|newResCount|新着レス数|
|Integer|newMarkResCount|スレッドの新着境界より後のレス数|
|Integer|newMarkResIndex|新着境界直後のレスのインデックスを返す。新着境界が表示されていない場合は既得レス数を返す。(代入により設定可能。)|
|Integer|speed|スレッドの1日当りのレス数|
|java.io.File|sytleDir|レス表示スタイルフォルダ|
|boardオブジェクト|board|スレッドが属する板のboardオブジェクト|
|java.io.File|styleFile|通常の掲示板ではth.styleDir\style.txtに、Twitterではth.styleDir\style_tw.txtになります|
|bool|unread|スレッドに未読レスが存在する時にtrueを返します|
|bool|local|スレッドがローカルスレッドの時にtrueを返します|
|bool|live|スレッドがdat落ちしていないと推測される場合にtrueを返します|
|bool|lock|スレッドのレス表示タブがロックされている場合にtrueを返します。(代入により設定可能)|
|Integer|columnIndex|スレッドが開かれているカラムのインデックス(開かれていない場合は-1)を返す。|
|Integer|viewResIndex|表示されている最初のレスのインデックスを返す。(代入により設定可能。)|
|レスラベルオブジェクト|postResLabel|そのスレッドで自分の書き込みに自動で付くラベルを返す。ラベルを自動で付けない場合はnullを返す。|
|Integer[]|postResIndex|そのスレッドで自分の書き込みに自動で付くラベルが付いているレスのインデックスをJavaのArrayとして返す。注意:自分の書き込みが存在しない場合やラベルを自動で付けない場合もlengthが0のArrayを返す。|
|>|>| |
|~戻り値|~メソッド|~説明|
|resオブジェクト|getRes(Integer i)|インデックスがiのレスオブジェクト(nullの可能性がある)|
|bool|update()|スレッドを更新する(外部へのネットワーク接続の許可が必要 ${SCRIPT:S})。実行には&br;・th.update()の実行回数はスレ一覧の巡回数に加算され、残り巡回数が0の時は更新されない&br;・各スレッドに対してスクリプトでの更新の間隔は10秒以上(別スクリプトや同一スクリプトの複数回実行を含む)&br;という制限があり、この制限によりスレッドが更新されなかった場合update()はfalseを返す。|
|bool|updateAndWait()| スレッドを更新した後更新完了まで待つ。何らかの制限のためスレッドを更新できなかった場合はfalseを返す。&br;注意:EventDispatchThread(GUI処理用のスレッド)で実行された場合はスレッドを更新せずfalseを返す。|
|void|resetUnread()|スレッドの未読状態をリセットします。(th.unreadがfalseを返すようになる。)|
|void|open(bool bu,bool bnt,bool bbg)|スレッドをレス表示欄で開きます。bu: trueの時更新する、bnt: trueの時新タブで開く、bbg: trueの時裏で開く。bu, bnt, bbgは省略可でデフォルト値はそれぞれtrue, true, false。&br;注意:スレッドの更新にはスクリプトに外部へのネットワーク接続の許可が必要です。(${SCRIPT:S})|
|書き込み欄オブジェクト|openWritePanel()|対応する書き込み欄を開いて書き込み欄オブジェクトを返します。(書き込み欄を開くことができなかった場合はnullを返す。)|
|書き込み欄オブジェクト|mayOpenWritePanel()|スレッドが書き込み可能な場合にのみ書き込み欄を開いて書き込み欄オブジェクトを返します。(書き込み欄を開くことができなかった場合はnullを返す。)|
|void|close()|スレッドのレス表示タブを閉じます。(レス表示タブが開いていない場合もエラーになりません。)|
|void|clearNewMark()|スレッドがレス表示タブで開いている場合、新着境界表示をクリアします。(レス表示タブが開いていない場合はresetUnread()を実行します。)|
|void|importPropertyFrom(threadオブジェクト th0)| threadオブジェクトth0からプロパティをインポートする。インポートするプロパティは最後にインポートした時の設定が使用される。&br;注意:スクリプトにプロパティ変更の許可が必要です。(${SCRIPT:Vp})|
|void|movePanelTo(Integer ic,Integer it)|スレッドのレス表示タブをインデックスicのカラムのインデックスitのタブに移動する。ic・itが-1の場合は最後のカラム・タブに移動する。|
|void|importDatFile(java.io.File f,String n,bool o)|ファイルfをdatとしてインポートします。n,oは省略可能。datからスレタイを取得できなかった場合にn(デフォルトはnull)がスレタイになり、o(デフォルトはtrue)がfalseの場合にはスレッドをレス表示欄で開きません。|
|void|importDatBytes(java.lang.Byte bl,String n,bool o)|Javaのバイト列blをdatとしてインポートする。n,oに関してはimportDatFileと同じ|

**resオブジェクト(res) [#d1f29ba4]

|~型|~プロパティ|~説明|
|bbsオブジェクト|bbs|レスオブジェクトresからBBSオブジェクトを返します。|
|Integer|number|レス番号|
|Integer|index|レスインデックス (最初のレスは0)|
|String|name|名前欄|
|String|mail|メール欄|
|String|date|投稿時刻|
|Integer|time|1970/01/01から投稿時刻までの経過時間(ミリ秒単位)、計算できない場合は0|
|String|id|ID|
|String|beID|BeのID(基礎番号、存在しない場合は0|
|String|aux|補助情報(まちBBSのIP等datフォーマットの投稿日時&時間&ID欄を半角区切りにした4個目以降(BeIDは除く)|
|String|message|本文|
|bool|ng|レスが非表示の場合にtrue|
|String|ngReason|非表示の理由を示す文字列を取得する。非表示でない場合はnull|
|resオブジェクト|ngOrigin|連鎖非表示の元となったレスオブジェクトを取得する。連鎖非表示でない場合はnull|
|bool|ngTransparent|resが透明非表示の場合にtrueを返す|
|Integer|weight|非表示のウェイトを取得する|
|Integer|refCount|被参照数|
|Integer|idCount|同じIDを持つレスの総数(スレッド内)|
|linkオブジェクト[]|links|本文に含まれるリンク|
|Integer[]|refResIndex|レスを参照しているレスのレス番号のArray(参照しているレスが存在しない場合はnull)|
|レスラベルオブジェクト|resLabel|レスresに設定されているレスラベル(設定されていない場合はnull)を返します。|
|String|source|resのソース(datの行)を返す。datファイルが存在しない場合nullを返す。&br;呼び出す度にdatファイルを開くので、連続して呼び出すような処理の場合readStringFromFileでdatを読み込んで直接取得したほうが良い|
|java.net.URL|url|resのURLを返す。対応するURLが存在しない場合はnullを返す|
|bool|twitter|resがTwitterのTweetの場合にtrueを返す。|
|bool|retweet|resがリツイートされたTweetの場合にtrueを返す。Twitterレス以外ではnullを返す|
|java.lang.Long|tweetID|resのTweetIDをjavaのLongとして返す。Twitterレス以外ではnullを返す|
|ユーザオブジェクト|user|resのユーザオブジェクトを返す。Twitterレス以外ではnullを返す|
|String|clientName|resが投稿されたクライアント名を返す。Twitterレス以外ではnullを返す|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|setResLabel(レスラベルオブジェクト rl)|レスresにレスラベルrlを設定します。rlがnullの場合はレスのラベルをクリアします。&br;rescheck.jsでは使用できません|
|void|setResLabelOfName(String sn)|レスresに名前がsnのレスラベルを設定します。snがnullまたは空文字列の場合はレスのラベルをクリアしますが、それ以外でsnに該当するレスラベルが存在しない場合は何もしません。&br;rescheck.jsでは使用できません|
|void|addNGID(bool t, Integer w)|resのIDをNGIDに追加する&br;t … trueの場合透明(デフォルト値はfalse)&br;w … ウェイト(-9≦w≦9、デフォルト値は0)&br;t及びwは省略可&br;注意:4文字以下のIDはNGIDに追加できません。&br;rescheck.jsでは使用できません|
|void|setNGRes(bool t)|resを非表示にする。t(デフォルト値はfalse)がtrueの場合は透明非表示。&br;tは省略可。&br;rescheck.jsでは使用できません|
|void|setNoNGRes()|resを常に表示する。rescheck.jsでは使用できません。|
|void|resetNGRes()|resの非表示設定をクリアする。|

**ユーザオブジェクト(usr) [#sfa301db]
res.userプロパティから受け取れるTwitterユーザー情報のオブジェクト

|~型|~プロパティ|~説明|
|java.lang.Long|id|ユーザーID&br;注意:Twitter検索とそれ以外ではユーザIDが違います。|
|String|userName|ユーザ名|
|String|name|名前 (res.nameと同じ)|

**linkオブジェクト(lnk) [#ffe43625]

|~型|~プロパティ|~説明|
|java.net.URL|url|リンクのURL|
|java.io.File|imageCacheFile|リンクの画像キャッシュファイル(キャッシュが存在しない場合はnull)|
|bool|type_IMAGE|リンクオブジェクトlnkのURLが画像の拡張子で終わっているかまたはImageViewURLReplace.datにマッチする行がある場合にtrueを返します。&br;あまり当てにならない。datファイル開いて正規表現等で調べたほうが良い|

**レスラベルオブジェクト(rl) [#caf0f997]

res.resLabel,th.postResLabel等で取得できるレスラベルのオブジェクト。

|~型|~プロパティ|~説明|
|String|name|レスラベルの名前|

**書き込み欄オブジェクト(wp) [#l4c87f24]
th.openWritePanel(),th.mayOpenWritePanel()で対応する書き込み欄オブジェクトを取得できます。

|~型|~プロパティ|~説明|
|threadオブジェクト|thread|スレッドオブジェクトを返します。注意:スレ立ての場合は板・BBSオブジェクト取得等の限られた用途でしか使用できません。|
|入力欄オブジェクト|title|タイトルの入力欄オブジェクトを返します。直接文字列を代入することもできます|
|入力欄オブジェクト|name|名前の入力欄オブジェクトを返します。直接文字列を代入することもできます|
|入力欄オブジェクト|mail|メールの入力欄オブジェクトを返します。直接文字列を代入することもできます|
|入力欄オブジェクト|message|本文の入力欄オブジェクトを返します。直接文字列を代入することもできます|
|bool|preview|書き込みプレビューを表示している時にtrueを返します(代入により表示・非表示を操作可能)|
|bool|sage|sageチェックボックスがチェックされている時trueを返します(代入によりチェックを設定可能)|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|close()|書き込み欄を閉じます|

**入力欄オブジェクト(tc) [#q07f74ca]
wp.title, wp.name, wp.mail, wp.message … 書き込み欄オブジェクトから、それぞれスレタイ入力欄、名前欄、メール欄、本文入力欄に対応するオブジェクトを取得できます。

|~型|~プロパティ|~説明|
|String|text|入力されているテキストを返します(代入により設定可能)|
|String|selText|選択範囲のテキストを返します(代入により設定可能)|
|Integer|caretPos|キャレットの位置を整数で返します(代入により設定可能)|
|Integer|selStart|選択開始位置を整数で返します(代入により設定可能)|
|Integer|selEnd|選択終了位置を整数で返します(代入により設定可能)|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|select(Integer is, Integer ie)|isからieまでの範囲を選択します|
|void|copy()|コピーします|
|void|paste()|ペーストします|
|void|cut()|カットします|

**HttpRequestオブジェクト(hr) [#o4a07542]
HTTPのファイル取得でリクエストヘッダの設定やPOSTデータの送信ができます。&br;
まず最初にHttpRequestオブジェクトを作成します。&br;
※setRequestProperty(name,value)はgetContentsAs*()の前に、その他はgetContentsAs*()の後に実行する必要があります。
|~戻り値|~コンストラクタ|~説明|
|HttpRequestオブジェクト|v2c.createHttpRequest(u)|URLuをGETするHttpRequestオブジェクトを作成する。&br;URLuは文字列、java.net.URL、どちらでも使えます|
|HttpRequestオブジェクト|v2c.createHttpRequest(u, d)|URLuに対してPOSTメソッドで送るHttpRequestオブジェクトを作成する。&br;(dはそのまま送信されるので適切にencodeされている必要がある。)&br;dは主にmulti-partフォームデータを文字列で指定します。&br;文字コードが間違っているとうまく行きません。&br;var moji = java.lang.String("文字列"); &br;d = moji.getBytes("MS932");&br;のように変換するとShiftJISで送れます。UTF-8の場合は文字のまま送っても平気ですが。ファイルをアップロードする場合等はgetBytes("UTF-8")で文字列をUTF-8のbyte列に変換してファイルのバイト列と組み合わせましょう。&br;multi-partフォームデータの書式は説明を省きますがグーグルですぐ見つかります。&br;firebugを開いてネットタブを開いた状態でファイルアップロード等をすると実際にどのような書式でデータを送信したか確認することが出来ます。|
|>|>| |
|~型|~プロパティ|~説明|
|Integer|responseCode|HTTPレスポンスコード。リクエストの成否の判別に使用します。 &br;例:成功=200 NotFound=404 転送=301|
|String|responseMessage|HTTPレスポンスメッセージ|
|String|contentType|Content-Typeの値 text/html等フォーマットの判別に使います。MIME Content-Type参照|
|Integer|date|Dateの値(1970/01/01からの経過時間(ミリ秒単位))|
|Integer|lastModified| Last-Modifiedの値(1970/01/01からの経過時間(ミリ秒単位))|
|java.util.map|allResponseHeaders|全レスポンスヘッダ|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|setRequestProperty(String name, String value)|名前nameのリクエストヘッダフィールドに値valueを設定する。 &br;例: hr.setRequestProperty("Content-Type", "image/gif");&br;firefoxのfirebug等で接続崎とのヘッダのやりとりを調べられます。&br;クッキーを送りたい場合はnameにSet-Cookieを指定します。|
|String|getResponseHeader(String name)|名前nameのレスポンスヘッダフィールドの値(同名のフィールドが複数存在した場合は最後の値)&br;firefoxのfirebug等で接続崎とのヘッダのやりとりを調べられます。&br;クッキーを受け取りたい場合はnameにcookieを指定します。|
|java.lang.byte[]|getContentsAsBytes()|URLuから取得した内容|
|java.lang.String|getContentsAsString()|hr.getContentsAsBytes()を文字列に変換したもの |
**コールバック関数(V2Cから呼び出される関数) [#d6ee5450]
***スクリプトでのスレ一覧生成のコールバック関数 [#k058f0e6]
&size(18){スレッドオブジェクト[] getThreads(Object cx)};
--''cx'' … 処理の進捗状況をユーザーに知らせる機能を保持するオブジェクト
---''cx.maxProgress = n'' … ステータスバーに表示する進捗状況表示の最大値nを正の整数で設定する。
---''cx.progress = v'' … ステータスバーに表示する進捗状況表示の現在値vを0以上の整数で設定する。
---''cx.message = s'' … エラーにより中断した場合にステータスバーに表示されるメーセージsを設定する。
---''cx.skip'' … V2Cがオンライン状態でない等の理由でスレ一覧に表示するスレッドのArrayを取得できない場合は&br();cx.skipにtrueを設定してreturnしてください。スレ一覧にはキャッシュされていた前回の結果が表示されます。

|&color(red){外部コマンドの登録方法};&br();お気に入り・ツールバーにスクリプトを外部コマンドとして登録し、「アクション」に「スレ一覧で開く」を選択してください。&br();&br();&color(red){この関数の説明};&br();コマンドを実行するとまずスクリプトが実行され、&br();その後スクリプト内で関数getThreads(cx)が定義されている場合にはgetThreads(cx)が呼ばれます。&br();この機能の目的としては「ログから検索」や「Web検索」の拡張を想定しています。&br();v2c.getThread()などの関数は実際にdatが存在してなくてもスレッドオブジェクトを返してくれるので、&br();URLを2chっぽく誤魔化せばある程度自由にできます。&br();これに加えてgetdat.jsで独自にdatを作成すればどのようななサイトでもレス一覧に表示することができます。&br();&br();&color(red){その他の機能};&br();ツールバーに登録したスレ一覧用スクリプトボタンのポップアップメニューから「定期更新チェック」を選択すると15分間隔で定期更新を開始します。&br();定期更新中はコマンドボタンの文字が青色になり、更新結果に新規スレッドが存在するとボタンの文字が赤色になり定期更新を停止します。&br();定期更新は更新回数が400回に達するか3回連続でエラーになっても停止します。|
&br();&br();
''anago.2ch.netのソフトウェア板の過去ログ倉庫のスレッドをまとめて表示する例:''
&br();
 function getThreads(cx) {
   if (!v2c.online) {
     cx.skip = true;
     return null;
   }
   var sb='http://anago.2ch.net/software/';
   var bd=v2c.getBoard(sb);
   if (!bd) {
     cx.message = '板オブジェクトの取得に失敗';
     return null;
   }
   var su=sb+'kako/';
   var sk=v2c.readURL(su);
   if (v2c.interrupted) {
     return null;
   }
   if (!sk) {
     cx.message = su+'の取得に失敗';
     return null;
   }
   var thl=[],sul=[];
   var res=new RegExp('<A HREF="(o\\d+/subject.txt)">','gi');
   var rs;
   while (rs=res.exec(sk)) {
     sul.push(rs[1]);
   }
   cx.maxProgress = sul.length;
   for (var i=0; i<sul.length; i++) {
     var ss=v2c.readURL(su+sul[i]);
     if (v2c.interrupted) {
       return null;
     }
     if (!ss) {
       cx.message = su+sul[i]+'の取得に失敗';
       return null;
     }
     cx.progress = i+1;
     var ret=new RegExp('^(\\d+)\\.dat<>(.+) \\((\\d+)\\)$','gm');
     var rt;
     while (rt=ret.exec(ss)) {
       var st=rt[2].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
       var th=bd.getThread(rt[1],sb,st,rt[3]);
       if (th) {
         thl.push(th);
       }
     }
   }
   return thl;
 }
***POPUP関連のコールバック関数 [#c748ec73]
:v2c.context.setTrapFormSubmission(true)|&size(18){void formSubmitted(java.net.URL u, String sm, Object sd)};
--''u''  …  URL
--''sm'' …  'GET'または'POST'の文字列 
--''sd'' …  FORMのデータ
|setRedirectURL(b)・redirectURL(u)とよく似た方式で、&br;v2c.context.setTrapFormSubmission(true)を実行しておくと&br;HTMLポップアップ内のFORMを送信する時にスクリプトのformSubmitted(u,sm,sd)が呼ばれます。&br;formSubmitted()の返り値によらずFORMは送信されません。&br;v2c.context.setTrapFormSubmission(true)で設定された値はformSubmitted()を呼ぶ前にリセットされます。|
 使用例は:
 function formSubmitted(u,sm,sd) {
   v2c.println('URL: '+u);
   v2c.println('method: '+sm);
   v2c.println('data: '+sd);
 }
 
 var vcx = v2c.context;
 vcx.setPopupHTML('<html><body style="margin:10px;"><form action=""><input type="submit" value="action" name="name"></form></body></html>');
 vcx.setTrapFormSubmission(true);

:v2c.context.setRedirectURL(true)|&size(18){java.net.URL redirectURL(java.net.URL u)};
--''u''  …  URL
|setRedirectURL(true)を実行しておくとHTMLポップアップ上でリンクをクリックした場合redirectURLが呼ばれます。&br;redirectURL関数内で再度setRedirectURL(true)を指定すると多段ポップアップします。&br;ただし、ポップアップのHTML内のリンクは絶対参照でないとリンクと認識してくれなくてポップアップできません|
 多段ポップアップできない例:
 ○ <a href="http://www.google.com/image/">テスト</a>
 × <a href="./image/">テスト</a>
 
 redirectURL(u)のイメージは:
 function redirectURL(u) {
   if (uを独自に処理したい) {
     uの処理; // setPopupHTML等
     return null;
   } else if (別のURLをWebブラウザで開きたい) {
     return 別のURL;
   } else {
     return u; // そのままWebブラウザで開く(デフォルトの動作)
   }
 }
**systemスクリプトのコールバック関数 [#he5bd6b4]
システムスクリプトを変更した場合はファイル→再読み込みで各システムスクリプトを再読み込みすることが出来ます。&br;
スクリプト中で"_v2c_"で始まる名前は使用しないで下さい
***imagecache.jsのコールバック関数 [#w44017c9]
:imagecache.js|&size(18){void getDownloadNewImagesLimit(threadオブジェクト th, Object ov)};
|スレッドレッドを更新後、新着画像ファイルのダウンロードを開始する前に呼ばれる。返値は無視される。|
--''th'' … スレッドオブジェクト
--''ov'' … 新着画像ファイルダウンロードの設定を保持するオブジェクト
---''ov.maxdays'' … 初期値として「リンク・画像・動画」設定「新着画像ダウンロード」枠内の「D日前まで」のDが設定されています。必要に応じてこの値を変更してください。
---''ov.maximgs'' … 初期値として「リンク・画像・動画」設定「新着画像ダウンロード」枠内の「N枚まで」のNが設定されています。必要に応じてこの値を変更してください。

***rescheck.jsのコールバック関数 [#f6105a42]
下のような自明な関数は未定義にしておく方が実行速度が上がります
 function beginCheck(th,cx) {return true;}
 function checkRawText(res,cx) {}
 function checkAA(res,cx) {}
 function checkNG(res,cx) {}
 function endCheck(th,cx) {}
本文に特定の文字列を含むレスをAAレスと判定する例:
 function checkAA(res,cx) {
   if (res.message.indexOf('( ・e・)')>=0) {
     res.setAA(true);
   }
 }
レス読み込みの処理は以下のような順番になります。
+beginCheck(th,cx) (cx.checkRawText・cx.checkAA・cx.checkNGがtrue)
+各レスについて以下の繰り返し 
++"<>"によるフィールドの分離
++checkRawText(th,cx)
++ReplaceStr.txtによる置換
++レスの解析(時間・IDの分離や本文のリンク化等)
++通常の非表示・キーワードのチェック
++checkAA(res,cx)
++checkNG(res,cx) 
+endCheck(th,cx) 

非表示の再チェックでは各レスに対してcheckNG(res,cx)だけが実行されます。
+beginCheck(th,cx) (cx.checkNGがtrue)
+各レスについて以下の繰り返し
++checkNG(res,cx) 
+endCheck(th,cx) 
----
:rescheck.js|&size(18){Object beginCheck(threadオブジェクト th, Object cx)};
|beginCheck(th,cx)の返り値がfalseまたはbooleanとしてfalseと評価される場合は以後の処理はスキップされます。戻り値に任意のオブジェクトを渡して以下のコールバック関数に渡すことができます|
--''th'' … スレッドオブジェクト
--''cx'' … チェックに関するオブジェクト&br;スレッド読み込み時はcx.checkRawText・cx.checkAA・cx.checkNGは全てtrue、非表示の再チェック時はcx.checkNGのみtrue。
---''cx.checkRawText'' … trueの場合テキスト置換関数checkRawText(res,cx)が各レスに対して実行される。&br;実行を抑止したい場合はcx.setCheckRawText(false)を実行する。 
---''cx.checkAA'' … trueの場合AA判定関数checkAA(res,cx)が各レスに対して実行される。&br;実行を抑止したい場合はcx.setCheckAA(false)を実行する。
---''cx.checkNG'' … trueの場合NG指定関数checkNG(res,cx)が各レスに対して実行される。&br;実行を抑止したい場合はcx.setCheckNG(false)を実行する。

:rescheck.js|&size(18){void checkRawText(resオブジェクト res, Object cx)};
|主にレスのテキストを置換するための関数&br;(この関数のresオブジェクトでのみ使用できる拡張定義があります)|
--''res'' … レスオブジェクト
|~型|~プロパティ|~説明|
|String|timeid|時間とIDを解析する前の文字列を取得します。|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|setName(String name)|名前欄を文字列nameに設定する|
|void|setMail(String text)|メール欄を文字列textに設定する|
|void|setMessage(String text)|本文を文字列textに設定する|
|void|setNanasi(bool)|trueで名無しとして、falseで名無し以外の名前としてそれぞれ扱いが固定されます|
--''cx'' … チェックに関する情報を保持するオブジェクト。cx.checkObjectでbeginCheck(th,cx)で返されたオブジェクトを取得することができます。

:reccheck.js|&size(18){void checkAA(resオブジェクト res,Object cx)};
|AA判定をするための関数&br;この関数のresオブジェクトでのみ使用できる拡張定義があります)|
--''res'' … レスオブジェクト
|~戻り値|~メソッド|~説明|
|void|setAA(bool)|boolがtrueの場合このレスをAAレスと判定する|
--''cx'' … チェックに関する情報を保持するオブジェクト。cx.checkObjectでbeginCheck(th,cx)で返されたオブジェクトを取得することができます。

:rescheck.js|&size(18){void checkNG(resオブジェクトres,Object cx)};
|非表示判定をするための関数。&br;この関数のresオブジェクトでのみ使用できる拡張定義があります)|
--''res'' … レスオブジェクト
|~型|~プロパティ|~説明|
|Integer|weight|非表示のウェイトを取得する|
|>|>| |
|~戻り値|~メソッド|~説明|
|void|setNG(String labelName, bool b, Integer, wait)|このレスを非表示レスと判定する。&br;b及びwaitは省略可&br;labelName … ラベル&br;b … trueの場合透明(デフォルト値はfalse&br;wait … ウェイト (-9≦wait≦9、デフォルト値は0)|
|void|resetNG()|setNG()の非表示設定をクリアする。|
--''cx'' … 判定に関する情報を保持するオブジェクト。cx.checkObjectでbeginCheck(th,cx)で返されたオブジェクトを取得することができます。

:rescheck.js|&size(18){void endCheck(threadオブジェクト th, Object cx)};
--''res'' … レスオブジェクト
--''cx'' … 判定に関する情報を保持するオブジェクト

***subject.jsのコールバック関数 [#b0cfd369]
注意:
-checkSubject(ss,bd,cx)はsubject.txtを実際に取得した時にのみ実行されます。(例えばHTTPレスポンスコードが 304 Not Modified. の時は実行されない。)
-現在ローカル板・Twitter仮想板でcheckSubject(ss,bd,cx)は実行されませんが、将来実行される可能性があります。
ソフトウェア板でスレッド924を下げてスレタイの先頭に★を追加する例:
 function checkSubject(ss,bd,cx) {
   if (!bd.bbs.is2ch||(bd.key!='software')) {
     return ss;
   }
   var re=new RegExp('^(\\d+)\\.dat<>(.+) \\((\\d+)\\)$','gm');
   var ls=[],ls9=[];
   var rt;
   while (rt=re.exec(ss)) {
     if (rt[1][0]=='9') {
       ls9.push(rt[1]+'.dat<>★ '+rt[2]+' ('+rt[3]+')\n');
     } else {
       ls.push(rt[0]+'\n');
     }
   }
   return ls.concat(ls9).join('');
 }
:subject.js|&size(18){threadオブジェクト[] checkSubject(String ss, boardオブジェクト bd, Object cx)};
|subject.txtを取得した後解析する前に実行されます。ssそのまま、または変更した文字列を返してください。 |
--''ss'' … 取得したsubject.txt
--''bd'' … 板オブジェクト
--''cx'' … (現在はダミー)

***proxy.jsのコールバック関数 [#ib7df361]
例:
     function checkProxy(u,p) {
       if (RegExp('^http://[0-9A-Za-z-]+\\.2ch\\.net/software/subject.txt$').test(u)) {
         p.host = 'localhost';
         p.port = 2020;
       }
     }
注意:
-Proxy.txt内のProxyを選択してレスを書き込む時はcheckProxy(u,p)は実行されません。
-proxy.jsを変更した時は「ファイル」メニューの「再読み込み」→「proxy.js」で再読み込みすることができます。 
小技:
-予めV2Cの設定で書き込みポート1111、読み込みポート2222と決めておくことで、スクリプトから読み書きの内、片方だけ変更することができます。
 function checkProxy(u, p) {
     p.host = 'localhost';
     if (p.port == 1111) { // 書き込みポートの場合
         p.port = 8080;
     }
     if (p.port == 2222) { // 読み込みポートの場合
         p.port = 8888;
     }
 }

:proxy.js|&size(18){void checkProxy(java.net.URL u, Object p)};
|V2Cがネットワーク接続する前に実行されます。 |
--''u'' … javaのURLオブジェクト。
--''p'' … Proxy情報を保持するオブジェクト。ネットワーク設定でProxyを使用する設定になっている場合はその情報が設定されている。
---''p.host'' … Proxyのホスト名。(代入により設定可能。)
---''p.port'' … Proxyのポート番号。(代入により設定可能。)
---''p.direct()'' … 直接接続に設定する。(p.hostをnullに、p.portを0に設定する。) 

***threadld.jsのコールバック関数 [#f4e2291d]

:threadld.js|&size(18){void threadUpdated(threadオブジェクト th, Object cx)};
|スレッドの更新完了後更新音を再生する直前に実行されます。|
--''th'' … スレッドオブジェクト。
--''cx'' … スレッドの更新に関する情報を保持するオブジェクト
---''cx.numNewRes'' … 更新によって取得されたレス数。
---''cx.error'' … 更新中に何らかのエラーが発生した時にtrueを返します。
---''cx.soundName'' … V2Cの設定によって再生される予定のサウンドファイル名を返します。(サウンドファイルが指定されていない場合または「更新完了音を再生する」設定がオフの場合はnull。)
 cx.soundName = 'filename';
 で更新完了音を変更することができます。
---''cx.rounding'' … 巡回中にスレッドが更新された場合にtrueを返します。 

***getdat.jsのコールバック関数 [#d6cd8445]
getDat(th)はスレッドの過去ログを取得できなかった時に実行されます。(thはスレッドオブジェクト。)
:getdat.js|&size(18){threadオブジェクト getDat(threadオブジェクト th)};
|スレッドのログファイルの内容を返します。&br;getDat(th)はしたらばやまちBBSでも実行されますが、V2Cのログ保存形式はしたらばではrawmode.cgiそのまま、まちBBSでもしたらばと同じ形式に変換しているので注意してください。&br;getdat.jsにはデフォルトでネットワーク接続("S")が許可されています。|
--''th'' … スレッドオブジェクト
--''戻り値''
---''byte[]'' … バイト列byte[]をログファイルの内容として保存します。
---''null'' … ログファイルを取得できなかったことを示します。
---''上記以外'' … 返されたオブジェクトを文字列に変換し、それをさらに掲示板の文字コードでバイト列に変換したものをログファイルの内容として保存します。

***post.jsのコールバック関数 [#ceff4cd1]
:post.js|&size(18){void checkBeforeCreateThread(書き込み欄オブジェクト wp)};
|スレ立て時、V2Cが書き込み内容をチェックする前に実行されます。true以外を返すとスレ立て処理を中断します。|
--''wp'' … 書き込み欄オブジェクト 
:post.js|&size(18){checkBeforePost(書き込み欄オブジェクト wp)};
|書き込み時、V2Cが書き込み内容をチェックする前に実行されます。true以外を返すと書き込み処理を中断します。|
--''wp'' … 書き込み欄オブジェクト 

***menu.jsのコールバック関数 [#c0249553]
レス表示ポップアップメニューから「マーカーを引いたレスを抽出」を削除する例:

 function popupMenuCreated(pm,sn) {
   if (sn=='ThreadPanel') {
     for (var i=pm.getComponentCount()-1; i>=0; i--) {
       var mi=pm.getComponent(i);
       if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
         continue;
       }
       if (mi.getText().startsWith('マーカーを引いたレスを抽出')) {
         pm.remove(i);
         break;
       }
     }
   }
 }
レス番号ポップアップメニューの「設定」の最初のセパレータまでの項目を展開する例:
 function popupMenuCreated(pm,sn) {
   if (sn=='ResNum') {
     loop:
     for (var i=pm.getComponentCount()-1; i>=0; i--) {
       var mi=pm.getComponent(i);
       if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
         continue;
       }
       if (mi.getText()=='設定') {
         // mi は javax.swing.JMenu
         for (var j=0; j<mi.getItemCount(); j++) {
           var mj=mi.getItem(j);
           if (!(mj instanceof javax.swing.JMenuItem)) { // セパレータ
             mi.remove(j);
             for (var k=j-1; k>=0; k--) {
               pm.insert(mi.getItem(k),i);
             }
             break loop;
           }
         }
         break;
       }
     }
   }
 }

レス表示ポップアップメニューの抽出系の項目を下位メニューにまとめる例:
 function popupMenuCreated(pm,sn) {
   if (sn=='ThreadPanel') {
     var ie=-1;
     for (var i=pm.getComponentCount()-1; i>=0; i--) {
       var mi=pm.getComponent(i);
       if (!(mi instanceof javax.swing.JMenuItem)) { // セパレータ
         continue;
       }
       var sl=mi.getText();
       if (ie<0) {
         if (sl.startsWith('抽出ダイアログ')) {
           ie = i;
         }
       } else {
         if (sl.startsWith('リンクを含むレスを抽出')) {
           var m=new javax.swing.JMenu('抽出');
           for (var j=ie; j>=i; j--) {
             m.insert(pm.getComponent(j),0);
           }
           pm.insert(m,i);
           break;
         }
       }
     }
   }
 }
:menu.js|&size(18){void popupMenuCreated(javax.swing.JPopupMenu pm, String sn)};
|popupMenuCreated(pm,sn)はポップアップメニューが作成された時に実行されます。|
--''pm'' … 作成されたポップアップメニュー(JPopupMenu)。
--''sn'' … 作成されたポップアップメニューの名前。
|>|snに指定できるポップアップメニュー名|
|ThreadPanel|レス表示欄ポップアップメニュー|
|TwitterPanel|Tweet表示欄ポップアップメニュー|
|ResNum|レス番号ポップアップメニュー|
|ResCheck|レスのチェックポップアップメニュー|
|Name|名前欄ポップアップメニュー|
|TwitterUserName|Twitterユーザ名ポップアップメニュー|
|Mail|メール欄ポップアップメニュー|
|Time|投稿時間ポップアップメニュー|
|ID|IDポップアップメニュー|
|Aux|補助情報ポップアップメニュー|
|Link|リンクポップアップメニュー|
|Thumbnail|サムネイル画像ポップアップメニュー|
|SelText|選択テキストポップアップメニュー|
|SelTextLink|選択範囲のリンクポップアップメニュー |

-menu.jsで使用するJavaオブジェクトの説明
-メニュー項目のイメージ:
 □JMenu pm (右クリックメニューの起点root)
  ├ JMenuItem メニュー項目
  ├ ──── (pm.addSeparator()で追加した区切り線)
  ├ JMenu subMenu
  │ └ JMenuItem メニュー項目
  └JMenuItem メニュー項目

-メニュー操作のJava6リファレンスリンク
--[[Java6 リファレンスJMenu >http://docs.oracle.com/javase/jp/6/api/javax/swing/JMenu.html]]
--[[Java6 リファレンス JMenuItem>http://docs.oracle.com/javase/jp/6/api/javax/swing/JMenuItem.html]]
--[[Java6 リファレンス JCheckBoxMenuItem>http://docs.oracle.com/javase/jp/6/api/javax/swing/JCheckBoxMenuItem.html]]

-表中の省略名は以下のオブジェクトを示します
-''pm'' = javax.swing.JMenu
-''o'' = javax.swing.JMenuItem
-''cbo'' = javax.swing.JCheckBoxMenuItem

|~戻り値|~メソッド|~引数|~説明|
|javax.swing.JMenuItem|pm.insert(JMenu subMenu, Integer index)|''subMenu''|子メニュー。JMenuではなくIMenuItemを渡すとメニュー項目を挿入できます。|
|~|~|''index''|子メニュー(またはメニュー項目)をJMenuItem一覧のインデックス index(最初の項目を0とする)の直上に挿入します|
|>|>|>|JMenu pmを起点とする右クリックメニューのJMenuItem一覧のインデックス index(最初の項目を0とする)の直上に子メニュー subMenuを挿入します。&br;子メニュー subMenuに対してsubMenu.insert(JMenu subMenu2, Integer index)を使うと孫メニューを挿入できます。&br;またJMenuItemを挿入することもできます。&br;javax.swing.MenuItem(String maenuName)…メニュー項目&br;javax.swing.JCheckBoxMenuItem(String menuName, bool checked)…チェックボックス付きのメニュー項目。checkedがtrueだとチェック済みのメニュー項目を作成します|
|~戻り値|~メソッド|~引数|~説明|
|javax.swing.JMenu|pm.add(JMenu subMenu)|''subMenu''|JMenuItem一覧の末尾に子メニュー subMenuを追加します(同上)|
|void|pm.remove(Integer index)|''index''|メニューのJMenuItem一覧のインデックス index(最初の項目を0とする)のJMenuItemを削除します|
|~戻り値|~メソッド|~引数|~説明|
|javax.swing.JMenuItem|pm.getComponent(Integer index)|''index''|JMenuItem一覧のインデックス index(最初の項目を0とする)|
|javax.swing.JMenuItem|pm.getItem(Integer index)|~|~|
|>|>|>|メニューのJMenuItem一覧のインデックス index(最初の項目を0とする)のJMenuItemを返します。&br; JMenuItemでない項目はセパレータです&br; if (menuItem instanceof javax.swing.JMenuItem)で判別します|
|~戻り値|~メソッド|~引数|~説明|
|String|pm.getText()|なし|JMenuメニュー項目名を返します|
|String|o.getText()|なし|JMenuItem項目名を返します|
|Integer|pm.getComponentCount()|なし|メニューのJMenuItem項目数を返します|
|void|pm.addSeparator()|なし|メニュー項目の末尾に区切り線を挿入します|
|~戻り値|~メソッド|~引数|~説明|
|void|o.addActionListener(action)|function|javascriptの関数オブジェクト|
|>|>|>|JMenuItemをクリックした時に処理させたい関数を指定できます。&br;o.addActionListener(function(e) {&br; v2c.alert('クリックされたよ');&br;});&br;o.addActionListener(new java.awt.event.ActionListener({&br; actionPerformed: function(e) {&br;  v2c.alert('クリックされたよ');&br; }&br;}));|
|~戻り値|~メソッド|~引数|~説明|
|void|cbo.addChangeListener(action)|function|javascriptの関数オブジェクト|
|>|>|>|JCheckBoxMenuItemをクリックされたときに処理させたい関数を指定できます&br;o.addChangeListener(new java.awt.event.ChangeListener({&br; stateChanged : function(e) {&br;  if (e.source.isSelected()) { // チェック状態を確認する&br;   e.source.setSelected(true); //チェックを入れる&br;  }&br; }&br;}));|

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS