第59行第2行的错误:SystemLiteral"或者'预期

时间:2014-05-27 14:45:43

标签: ios ipad mobile-safari

当我打算使用内置的Web视图引擎打开一些网页时,我的iOS应用程序出现了这样的错误(基于Safari,但Safari工作正常):

  

此页面包含以下错误:第59行第2行的错误:   SystemLiteral“或'expected。下面是页面的渲染   第一个错误。

(没有渲染)。 有趣的是,这些网站可以在我的应用程序的iPhone版本上打开,但不能在iPad上打开。 在互联网上,我发现数以万计的网站无法由谷歌机器人处理 - 当我在谷歌搜索时:

  

“59:SystemLiteral”或“预期”

它列出了搜索结果,但所有找到的网站的说明都显示了我的错误。但是,当我打开它们中的任何一个时,它们在桌面浏览器和iOS Safari上呈现正常。 谁知道可能是什么原因?通过此谷歌搜索打开的网站可以在iPad上的我的应用程序中呈现 - 所有显示相同的错误。

我也尝试使用Mac的Safari Developer模式对其进行调试,但它没有提供任何提示。

更新:我准备了一个最小的项目,添加了UIWebView控制器,它显示了同样的错误。 ViewController.h:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end

ViewController.m:

#import "ViewController.h"
@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *fullURL = @"http://catalog.llc.lib.ms.us/polaris/";
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_webView loadRequest:requestObj];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
@end

我也尝试了几个带有此代码的网页(全部来自我上面提到的谷歌搜索),它们也显示了不同的错误,例如“第9行第1077行的错误:打开和编辑标签不匹配:META第0行和头部。 “ - 这来自http://www.lucindalayton.com/home/?ID=15449,但仍然无法呈现。

2 个答案:

答案 0 :(得分:0)

看一下该网站的回复,它在回复开始时有一个空白行,似乎有点好奇。在我的第一次尝试中,我修剪了那个空白:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString     *fullURL = @"http://catalog.llc.lib.ms.us/polaris/";
    NSURL        *url     = [NSURL URLWithString:fullURL];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (!data) {
            NSLog(@"%s: sendAsynchronousRequest error: %@", __PRETTY_FUNCTION__, connectionError);
            return;
        }
        NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        [_webView loadHTMLString:html baseURL:url];
    }];
}

但我后来注意到你不必修剪空白,而只是使用loadHTMLString似乎已经足够了。

我不清楚为什么Safari会像iPhone网页视图那样正确处理这个问题,而不是iPad网页视图。但这似乎绕过它。

答案 1 :(得分:0)

罗布,感谢提示,但在我的情况下,这是另一回事。我发现使用一些测试网页分析浏览器和服务器之间的沟通突破。
我将详细解释:
问题与用户代理和mime类型有关。 我的应用程序包含在用户代理字符串中,除其他外,

"Mobile/[somenumber] Safari Version/[someversionnumber]"
有些服务器非常严格,用户代理和移动基于Safari的浏览器都需要一些Safari webkit版本,所以正确的表示法应该是是
"Mobile/[somenumber] Safari/[someverionnumber] Version/[someversionnumber]"
符号会影响服务器的行为 - 它会发送不同的mime类型(Content-Type)。对于我在qestion中提到的用户代理不正确的网站&#34; Content-Type&#34;由服务器设置为&#34; application / xhtml + xml&#34;,但是当它正确时它是&#34; text / html&#34;这没有任何问题。在这两种情况下发送的Html代码完全相同。

无论如何,对我来说,仍然很难说它是否是服务器站点错误,它允许发送&#34; application / xhtml + xml&#34;移动设备的内容类型,或无论如何应该处理此类代码的webkit或非常严格的用户代理表示法。