0

PhoneGap アプリケーションで、.m Objective C ファイルから JavaScript の行を返そうとしています。1 つの変数では問題なく実行できますが、もう 1 つの変数は黙って失敗します。NSString 変数 *text の宣言方法に矛盾があるように見えますが、私は Objective C を初めて使用するので、コードの何が問題なのかわかりません。以下のコードを参照してください。

- (void)umSwipe_receivedSwipe:(NSNotification *)notification {
    NSLog(@"umSwipe_receivedSwipe called");
    NSData *data = [notification object];
    NSString *text = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    // FAIL: This fails silently
    NSString* orig = [NSString stringWithFormat:@"alert('%@')", text];
    [super writeJavascript:orig];

    // This works great
    NSString* someVar = @"B1234221012341234^LAST/FIRST^151710100000000099000000?;1234221012341234=15171010000000099?";
    NSString* concat = [NSString stringWithFormat:@"alert('%@')", someVar];
    [super writeJavascript:concat];
}

背景として、これはiPad でUniMag 磁気ストリップ スキャナーを利用することです。

同じ文字データが含まれている場合、一方の変数が機能し、もう一方の変数が機能しないのはなぜですか? iOS PhoneGap アプリケーションで JavaScript に送信する文字列にこの変数を組み込むにはどうすればよいですか?

ところで、何かへの単なるリンクではなく、コードが修正されている場合、回答を高く評価して理解する可能性がはるかに高くなります。

ありがとう。

編集: エラーが JavaScript エラーであることを発見しました。問題の正確な原因はまだわかりませんが、NSString 変数には、JS エクスペリエンスを無効にする何らかの不可視の文字が含まれている必要があります。たぶん、NSLogしたときに表示されない改行...?

4

1 に答える 1

0

ラインブレイクでした。このコードを変更しました:

NSString* orig = [NSString stringWithFormat:@"alert('%@')", text];

これに:

NSString *nolinebreaks = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@" "];
NSString* orig = [NSString stringWithFormat:@"alert('%@')", nolinebreaks];

...そして、すべてが良いです。

FWIW、すべての JS console.log スクリプトを表示し、xcode コンソールに記録された JS エラーを表示するために、次のスクリプトを JS コードの先頭に追加しました。

<script type="text/javascript">
    // Make the console debugger work properly
    console = new Object();
    console.log = function(log) {
      var iframe = document.createElement("IFRAME");
      iframe.setAttribute("src", "ios-log:#iOS#" + log);
      document.documentElement.appendChild(iframe);
      iframe.parentNode.removeChild(iframe);
      iframe = null;    
    }
    console.debug = console.log;
    console.info = console.log;
    console.warn = console.log;
    console.error = console.log;
    debug.log = console.log;

    window.onerror = function(message, url, lineNumber)
    {
        console.log("[Javascript Error]: "+message+" in "+url+" at line "+lineNumber);
    }

</script>
于 2013-09-17T20:35:58.607 に答える