当我打算使用内置的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,但仍然无法呈现。
答案 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)
"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或非常严格的用户代理表示法。