2016-09-13 81 views
1

TM-U220をサポートするEpsonプリンタ用の2つのjavascript SDKをダウンロードしましたが、どちらもプリンタに接続せず、印刷もされません。しかし、QZ Trayなどの他のSDKを使用しようとしたときに機能しましたが、QZトレイがオンになっている必要があります。アンドロイドで動作させたいので、Epsonのjavascript SDKを使用します。 192.168.1.98、ポート:9100、およびデバイスID:local_printer、私はこのエラーを得た:TM-U220への接続中にエラーが発生しました。



問題は、私はエプソンはjavascriptのSDKと入力して、IPを提供したことを、プリンタのサンプルを使用する場合でありますがePOS Device Service Interfaceに接続できませんでした。 [ERROR_TIMEOUT]


しかし、プリンタは小さな印刷物、私が読むことができない手紙、そして印刷の最後に:2http/1.1をしました。そして、コンソールで:

OPTIONS https://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000ネット:: ERR_CONNECTION_REFUSED



はOPTIONS https://192.168.1.98/cgi-bin/eposDisp/service.cgi?devid=local_display&timeout=10000ネット:: ERR_CONNECTION_REFUSED


私自身も簡単なコードを作成しました。 これは使用して私の最初のコードであるエポス-2.3.0.js

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Print Test</title> 

     <script type="text/javascript" src="epos-2.3.0.js"></script> 

     <script type="text/javascript"> 
      // Retrieving Printer objects (printer selection) 
      var printer = null; 
      // Retrieving Printer objects (printer selection) 

      // Creating ePOSDevice objects (device connection and communication) 
      var ePosDev = new epson.ePOSDevice(); 

      function connect() { 
       var ipAddress = '192.168.1.98'; var port = '9100'; 
       ePosDev.connect(ipAddress, port, callback_connect); 
      } 
      // Creating ePOSDevice objects (device connection and communication) 

      // Retrieving Printer objects (printer selection) 
      function callback_connect(resultConnect) { 
       var deviceId = 'local_printer'; 
       var options = {'crypto' : false, 'buffer' : false}; 

       if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) { 
        // Retrieves the printer object 
        alert("Success callback connect"); 
        ePostDev.createDevice(deviceId, ePosDev.DEVICE_TYPE_PRINTER, options, callback_createDevice); 
       } 
       else { 
        // Displays error messages 
        alert("Error callback connect"); 
       } 
      } 

      function callback_createDevice(deviceObj, errorCode) { 
       if (deviceObj === null) { 
        // Displays an error message if the system fails to retreive the printer object 
        return; 
       } 
       printer = deviceObj; 

       // Registers the print complete event 
       printer.onreceive = function(response) { 
        if (response.success) { 
         // Displays the successful print message 
         alert("Callback create device response success"); 
        } 
        else { 
         // Displays error messages 
         alert("Callback create device response failed"); 
        } 
       } 
      } 
      // Retrieving Printer objects (printer selection) 

      // Creating print data (data buffering) 
      function createData() { 
       printer.addTextAlign(printer.ALIGN_CENTER); 
       printer.addText('Hello World\n'); 
      } 
      // Creating print data (data buffering) 

      // Sending print data (printing and disconnection) 
      function send() { 
       if (ePosDev.isConnected) { 
        printer.send(); 
       } 
      } 
      // Sending print data (printing and disconnection) 
     </script> 
    </head> 
    <body> 
     <input type="button" onclick="connect()" value="Connect" /> 
     <input type="button" onClick="send()" value="Print Hello World" /> 
    </body> 
</html> 


そして、私が使用しているこの1 エポスプリント-3.2.0.js

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <title>Print Test 2</title> 
     <script type="text/javascript" src="epos-print-3.2.0.js"></script> 
     <script type="text/javascript"> 
      function buildMessage() { 
       // Create a print document 
       var builder = new epson.ePOSBuilder(); 
       builder.addTextLang('en'); 
       builder.addTextSmooth(true); 
       builder.addTextFont(builder.FONT_A); 
       builder.addTextSize(3, 3); 
       builder.addText('Hello,\tWorld!\n'); 
       builder.addCut(builder.CUT_FEED); 
       var request = builder.toString(); 

       var address = 'http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000'; 

       // Create an ePOS-Print object 
       var epos = new epson.ePOSPrint(address); 
       //Send the print document 
       epos.send(request); 
      } 
     </script> 
    </head> 
    <body> 
     <button onclick="buildMessage()">Run</button> 
    </body> 
</html> 

私は2番目のコードを実行すると、私は私のコンソールでこのエラーを得た:

OPTIONS


http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000

XMLHttpRequestがhttp://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000をロードすることはできません。プリフライト要求に対する応答がアクセス制御チェックを通過しない:いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。したがって、原点「ヌル」はアクセスが許可されません。応答 はHTTPステータスコード405を持っていました。


しかし、私は
http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
から
http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
にアドレスを変更すると、それは私にこの印刷:

OPTIONS/CGI-binに/エポス/サービスを。 cgi?devid =ローカルプリンタ&タイムアウト= 10000IPアドレス:HTTP/1.1
ホスト:192.168.1.98:9100
接続:キープアライブアクセス制御要求メソッド:POST
オリジン:null
ユーザーエージェント:Mizilla/5.0(Windows NT 6.3; WOW64)のAppleWebKit/537.36 (ヤモリ様KHTML)クローム/ 52.0.2743.116サファリ/ 537.36
アクセス制御リクエスト・ヘッダー:コンテンツ・タイプ変更した場合-ので、 のSOAPAction
は受け入れ:*/*
承諾GZIP、 デフレートし、SDCH
は=言語を受け入れ:-encoding EN-US、EN; Q = 0.8

+0

ちょっと男、私は同じ問題を抱えています、どうやって修正しましたか?なぜポート9100を使用するのですか?ポート8008 –

+0

@DanielArenas Sorr、まだ解決できません。 –

+0

ポート9100に接続しても同じ問題が発生します。誰かがこれを変更する方法を知っている私に教えてください:) –

答えて

0

それを見てから、これはクロスオリジンHTTPリクエストを発行(CORS)です。このMDNの記事は、次のように説明しています。https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

私は、IP 92.168.1.98がローカルIPネットワーク上のプリンタIPであると推測しています。参照してください:http://trendblog.net/ever-wondered-use-192-168-x-x-ip-addresses-home/と上記のあなたの記事に記載されているようにポート9100経由でアクセスすることができます。

実際のWebアプリケーションがプリンタIPと異なる方法で動作しているため、クロスサイトスクリプティング攻撃を防止するために、別のIP /ホストを呼び出す場合はCORSが必要です。

プリンタがポート9100経由で公開されている場合は、それをあなたのURIの一部として使用することが一般的です。それがhttp://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000が動作し、もう一方が動作しなかった理由です。

これはAndroidデバイス経由でアクセスしようとしています...質問はデバイスがローカルネットワーク(192.168 ....)に参加しているのですか、それともインターネットにありますか?それがインターネットに接続されている場合、おそらくインターネットに公開されないプリンタにアクセスできるとは思われません(パブリックIPを持っている)。彼らが同じネットワークに属している限り、彼らは話すことができるはずです。そうでない場合は、インターネットに公開する(悪いアイデア)か、お互いに見えるようにする必要があります(Androidはあなたの会社のWIFIに接続し、プリンタはWIFI経由でアクセスできます)。

+0

こんにちは@JimmyChandra、あなたの応答のために、本当に私はローカルネットワークを介して自分のプリンタにアクセスしたいとはい、私のローカルネットワークに参加し、同じセグメント192.168を持っています。 1.x、同じセグメントにない場合は接続しません。だから私は何をすべきだと思いますか? –

+0

Cross Origin HTTP Requestに従っていますが、まだプリンタに接続できません。私はプレイストアにTM Utitlityというアプリをダウンロードし、それを私のローカルネットワークに接続すると自分のプリンタに接続でき、TM Utilityアプリからサンプルの領収書を印刷することができます。 –

+0

私はネットワーキングの専門家ではありませんが、ルーティングとは何かがあると思います。異なるサブネットと話していて、ルーティングが正しく設定されていないと、私は考えることができません。 http://superuser.com/questions/860949/communicating-with-devices-on-a-different-subnetを参照してください。これを設定する方法のヒントや、ネットワークのIT担当者と相談してヘルプを得ることができます。私はこれがあまりにも難しい場合は、同じサブネット内のすべてを構成することをお勧めします...彼らはそのように話すことができます参照してください。可能であれば、それはネットワーク問題である可能性が最も高いです。 –

関連する問題