IT用語辞典バイナリ | さくいん | サイトマップ | ヘルプ | お気に入りに追加  
HTML5 JavaScript API
IT用語辞典バイナリ<パソコン用語・コンピュータ辞書>
コンピュータ偉人伝<人物・画像・写真・プログラミング>
コンピュータ偉人伝<人物・画像・写真・プログラミング>
コンピュータ偉人伝<人物・画像・写真・プログラミング>
拡張子辞典<ファイル・変換・変更・表示>
HTML5タグリファレンス
CSS3リファレンス
HTML5 JavaScript API
エクセル関数リファレンス
ITパスポート試験
 
  
  IT用語辞典バイナリ > HTML5 JavaScript API > Web Messagingの使い方 > Web Messagingのサンプルコード
  カテゴリ別さくいん

Web Messagingのサンプルコード

サンプル

サンプル1とサンプル2を実行する際には、最後に掲載したサンプル共通ファイルcode.jsとlib.jsを同じディレクトリに配置する必要があります。

また、Google Chromeではセキュリティ上、ローカルHTMLファイルから他のローカルファイルの内容にアクセスする場合には、 ファイル読み込み自体を許可する「--allow-file-access」フラグと、 ローカルファイルからのファイル読み込みを許可する「--allow-file-access-from-files」フラグの両方を付けて起動する必要があります。

そのため、サンプル1とサンプル2をローカルファイルとして実行する場合は、Google Chromeについては上記フラグを付けて起動したうえで実行してください。

Windowsの場合は以下のようになります。

<Google Chromeのインストールフォルダ>\chrome.exe --allow-file-access --allow-file-access-from-files

サンプル1 専用ワーカーの利用

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>専用ワーカーとの接続サンプル(同期API FileReaderSync使用)</title>
</head>
<body>
<p>
専用ワーカーとの接続サンプル(同期API FileReaderSync使用)
</p>
<p>
選択したファイルの読み込みがバックグラウンドのワーカーで行われ、<br>
動的に上に追加されていきます。
</p>
<p>
テキストファイルの場合は最初の半角10文字が表示され、<br>
画像の場合はその画像が表示され、<br>
それ以外のファイルの場合はファイル名が表示されます。<br>
*Safariの場合はFileReaderSyncに未対応のためつねにファイル名になります<br>
*OperaはFileオブジェクトをワーカーへ送信できないため未対応です。
</p>
<input type="file" id="fileInput">
<div id="output"></div>

<script type="text/javascript">

    // HTML要素の参照を取得
    var input = document.getElementById('fileInput');
    var output = document.getElementById('output');

    // 専用ワーカーとの接続開始
    var worker = new Worker('code.js');
    
    // 受信したデータを表示領域に設定
    worker.onmessage = function(event) {
        output.innerHTML = event.data;
    }
    
    // エラー時にエラーメッセージをデバッグコンソールに出力
    worker.onerror = function(event) {
        console.log(event.message);
        console.log(event.filename);
        console.log(event.lineno);
    }
    
    // ファイル選択時に、選択されたファイルの情報を専用ワーカーへ送信
    input.onchange = function(event){
        // Fileオブジェクトの参照を取得
        var file = event.target.files[0];
        // 専用ワーカーへFileオブジェクトを送信
        worker.postMessage(file);
    };
    
    // 念のためwindowアンロード時に接続をクローズ
    window.onunload = function(event){
        worker.terminate();
    }
    
</script>

</body>
</html>

サンプル2 共有ワーカーの利用

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>共有ワーカーとの接続サンプル(FireFoxは共有ワーカー未実装)</title>
</head>
<body>
<p>共有ワーカーを利用したチャット<br>
複数ウィンドウ、タブ間でチャットを行うことができます。 
</p>
<hr>
<div id="output"></div>

<input type="input" id="input">
<input type="submit" value="送信" onclick="onSend()">

<script type="text/javascript">

    // HTML要素の参照を取得
    var output = document.getElementById('output');
    var input = document.getElementById('input');

    // 共有ワーカーとの接続開始
    var worker = new SharedWorker('code.js');
    
    // 共有ワーカーとの接続用ポートを取得
    var port = worker.port; 
    
    // 受信したデータを表示領域に設定
    port.onmessage = function(event) {
        // ワーカーから現在の全発言を配列で取得
        var comments = event.data;
        // 発言を上から新しい順に表示
        comments.reverse();
        output.innerHTML = "";
        for(var i = 0; i < comments.length; i++){
           output.innerHTML += "" + comments[i] + "<br>";
        }
    }
    
    // エラー時にエラーメッセージをデバッグコンソールに出力
    port.onerror = function(event) {
        console.log(event.message);
        console.log(event.filename);
        console.log(event.lineno);
    }
    
    // クライアントを識別するためのIDを生成
    var id = new Date().getTime();
    
    // チャットの発言を共有ワーカーへ送信
    function onSend(){
       port.postMessage(id + ":" + input.value);
    }
        
    // 念のためwindowアンロード時に接続をクローズ
    window.onunload = function(event){
        port.close();
    }
    
</script>

</body>
</html>

サンプル共通ファイル

ワーカー上で実行するファイル code.js

// code.js

// 別スクリプトの読み込み
importScripts('lib.js');

var images = "";

var ports = new Array();
var comments = new Array();

// 専用ワーカーの場合について、メッセージ受信時のイベントハンドラを定義
onmessage = function(event){
    // 別スクリプトから読み込んだ、ファイル読み込み関数を呼び出す
    images = convertFile(event.data) + "<br>" + images;
    // 読み込み結果を返信
    event.target.postMessage(images);
}
 
// 共有ワーカーの場合について、接続時のイベントハンドラを定義
onconnect = function(event){
    // 接続元と通信するためのMessagePortオブジェクトを取得
    var port = event.ports[0];
    // 接続元とのポートを配列に格納して保持
    ports.push(port);
    // 共有ワーカーの場合はこのMessagePortに対してメッセージ受信時のイベントハンドラを定義
    port.onmessage = function(event){    
       // 送信されてきた発言を配列に追加
       comments.push(event.data);
       // 保持しているすべての接続元へ再配信
       for(var i = 0; i < ports.length;i++){
           ports[i].postMessage(comments);
       }
    }
}


code.jsから読み込むファイル lib.js

// lib.js

var convertFile;

if ( "FileReaderSync" in self) { 
    var reader = new FileReaderSync();
    // ファイルタイプで返す値を変える
    convertFile = function(file){
        if(file.type.match(/image\/.*/)){
            // 画像ならば読み込んでimgタグ文字列を生成
            var data =  reader.readAsDataURL(file);
            return "<img src = '" + data + "'>";
        } else if (file.type.match(/text\/.*/)){
            // テキストならば読み込んで最初の10文字を返す
            return reader.readAsText(file).substring(0,10);
        } else {
            // それ以外の場合はファイル名を返す
            return file.name;
        }
    }
} else {
    // FileReaderSync未実装ブラウザ用定義
    convertFile = function(file){
        // 常にファイル名を返す
        return file.name;
    }
}

関連項目

関連する項目はありません)



シャープのマスクシャープのマスク
シャープが製造・販売する不織布マスク。
Surface Book 3Surface Book 3
Microsoftが販売するデタッチャブルPC。
Surface Go 2Surface Go 2
Microsoftが発表した2in1 PC。

 ・ITパスポート試験とは
 ・試験範囲と内容
 ・サンプル問題にチャレンジ

 ・Windowsの歴史
ジョン・マッカーシー LISPの開発者
ジョン・マッカーシー
人工知能の研究分野における第一人者。
スティーブ・ジョブズ Appleの共同創設者
スティーブ・ジョブズ
「Mac」や「iPhone」を生み出した経営者。
デニス・リッチー C言語、UNIXの開発者
デニス・リッチー
C言語の設計、UNIXの開発に携わった人物。
».m4b MPEG-4オーディオファイルの拡張子。 up!
».m4r iPhoneの着メロにするAACファイルにつく拡張子。 up!
».xlsx Excel 2007で作成したファイルのデフォルトの拡張子。
».docx Word 2007の標準的な保存形式。XML形式となっている。

2024年10月15日現在
ランキング1   ICT (用語辞典)
ランキング2   AirDrop (用語辞典)
ランキング3   コンテキスト  (用語辞典)
ランキング4   セグメント  (用語辞典)
ランキング5   アノテーション  (用語辞典)
ランキング6   オムニチャネル  (用語辞典)
ランキング7   スワイプ  (用語辞典)
ランキング8   インスタンス化  (用語辞典)
ランキング9   カラム  (用語辞典)
ランキング10   FOMO  (用語辞典)
RSS 0.91 RSS 1.0 RSS 2.0
IT用語辞典バイナリについて運営会社についてお問い合わせ先テクニカルライター募集利用規約
プライバシーポリシー著作権・商標について協力社一覧Weblio 辞書スマート翻訳英和辞典 - Weblio辞書Weblio英会話
©2024 GRAS Group, Inc. All rights reserved.