ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

2014年10月9日木曜日

[JavaScript] wait~リトライを行う処理

クライアントサイドJavaScriptでwait処理に相当するものが必要になったので調べてみた。

そもそもJavaScriptにはwait / sleep に相当する関数が無いみたいだが、
遅延処理を実現する setInterval() / clearInterval() の2つのメソッドにて同様の関数を実装できると判明。

今回は純粋なwait処理だけでなく、非同期に行われる処理との同期をとるためのチェックも行える必要があったのでこんな関数を書いた。

/* 
 * 条件を満たすか、指定回数だけリトライするまで待つ
 * ループ処理としても使える
 * [引数]    test        :終了条件を満たすかどうか判断する関数
 *             callback    :終了条件を満たした後に呼び出す関数
 *             time        :ポーリングタイム(ms)
 *             retry        :リトライ回数
 */
function wait(test,callback,time,retry) {
    // リトライ指定が無い場合はデフォルト回数を設定
    if(retry === undefined) { retry = 3; }
    
    var count = 0;
    
    // wait条件を満たすまで繰り返す処理
    var process = function() {
                        count++;
                        if(test() || (count > max)) {
                            clearInterval(timer);
                            callback();
                        }
                    };
    var timer = setInterval(process(),time);
}


参考にしたサイトでも指摘されていたが、時刻の取得→比較を繰り返すのはブラウザが固まってしまうアンチパターンなのでNG。

普段はJavaばかり書いてるので、JavaScriptでクロージャを意識したコードを書くの楽しい。

【参考】
【JavaScript】処理の実行タイミングを遅らせる方法 | Web制作会社スタイル
遅延実行 | JavaScript プログラミング解説
javascript で wait処理 - 新みのる日記

2014年7月11日金曜日

[VBS][JavaScript][IE操作] 信頼済みゾーンのサイトでIEオブジェクトが動かない

社内システムから定期的に情報を取得してメールを送信するバッチをJavaScriptで実装していると、
"そのインターフェイスは認識されません。"
やら
"エラーを特定できません。"
とのエラーが。 エラー発生箇所を見ると↓の4行目で落ちていた。
var ie = WScript.CreateObject("InternetExplorer.Application");

// IE読み込み待ち
while(ie.Busy or ie.ReadyState <> 4) {
}
エラーメッセージでググって出てきたheipooh's 日記 を見てみると
ゾーンの設定変更で解消したとのことなので、試してみたところうまくいった。

【環境】
Internet Explorer 8
※古い。。

2014年5月30日金曜日

[JavaScript] JScriptでメール送信ができる (Outlook, Gmail)

宛先や内容は毎回異なるが、ほぼ定型のメールを毎月送る定常業務がだるい~
ので自動化しようと調べてみたら、Jscriptでメール送信ができると知った。

[Outlook]
OutlookとWSHでメール送信 - くじらはんど★ブログ

[Gmail]
定型メールの送信を自動化する~GmailとJavaScriptの華麗な連携技(第13回)《クジラ飛行机「仕事に役立つJavaScript入門」》

社用メーラはOutlookなのでとりあえず上記を試してみたところ、難なく成功。
社員番号がエイリアスになっているので、宛先の設定も楽。

即バッチ作って来月から運用する。

2014年4月29日火曜日

[JavaScript] 画像の一部を範囲選択してぼかす(もしくはその他の加工を行う)

ブラウザに表示される画像の一部を範囲選択してぼかす機能を実装したい。
まだ試してないけども下記なんかを組み合わせて実現できそう。

1.範囲選択

Jcrop - Deep Liquid - 

2.ぼかし(その他の加工も多く用意されている)

Pixastic: JavaScript Image Processing Library - 


と思ったらPixasticはIEじゃ動かない的な一文が。

Pixastic works by utilizing the HTML5 Canvas element which provides access to raw pixel data, thereby opening up for more advanced image effects. This is where the "experimental" part comes into play. Canvas is only supported by some browsers and unfortunately Internet Explorer is not one of them. 
とはいえこれがいつ書かれた文書なのか良くわからないので今度ちゃんと試してみる。


・
・
・
そういえば、
画像加工用のライブラリは大量にあるみたいだけど、範囲を指定して加工できるものはあまり無いような気がした。