0

在 PhoneGap 应用程序中,我试图从我的 .m Objective C 文件中返回一行 JavaScript。我可以对一个变量毫无问题地这样做,但另一个变量会默默地失败。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 回答