- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在 iPhone 应用程序上工作了几个星期,我添加的早期功能之一是加载上下文敏感的维基百科页面主题的 UIWebView。这实现起来非常简单,并且已经运行良好一段时间了。
今天,我发现功能意外停止工作。我一直在那段代码的外围摆弄,最初认为我破坏了一些东西。
我检查了所有明显的地方,我的网址,UIWebView 是否仍然连接在 XIB 等中。我没有发现任何问题。
进一步调查,我在 UIWebViewDelegate didFailLoadWithError 上进行了一些错误处理,发现出现了 -999 错误:
NSURLErrorCancelled
Returned when an asynchronous load is canceled.
A Web Kit framework delegate will receive this error when it performs a cancel operation on a loading resource. Note that an NSURLConnection or NSURLDownload delegate will not receive this error if the download is canceled.
所以这听起来像是在原始请求完成之前发出新请求(或取消)。我检查我的代码是否有类似的内容,但结果是空的。
因此,我陷入了往常的偏执螺旋式下降,并假设维基百科正在阻止基于 UAgent 或其他内容的请求,并继续进行一些徒劳的尝试,试图欺骗我回到快乐的地方。这些尝试并没有成功,最终理智占了上风。我创建了一个简单的 python 脚本来模拟我从模拟器中的 APP 发出的 HTTP 请求,以查看维基百科发回的内容:
string = "GET /wiki/Franklin_D._Roosevelt HTTP/1.1\r\nHost: en.wikipedia.org\r\nUser-Agent: test\r\nReferer: http://en.wikipedia.org/wiki/Franklin_D._Roosevelt\r\nAccept: */*\r\nAccept-Language: en-us\r\n_Accept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\n\r\n"
import socket
s = socket.socket()
s.connect(("en.wikipedia.org",80))
s.send(string)
x = s.recv (1000)
while (x):
print x
x = s.recv (1000)
所以我运行了这个家伙,发现维基百科非常友善地迅速且完整地返回了我的数据。那么这是怎么回事?
中国佬开始出现在我的每件礼物、偏执的盔甲中“这总是我的错”,我决定检查其他 iPhone 应用程序是否可以查看这些 URL。我发布了tweet带有一个具有讽刺意味的有趣(我很容易被逗乐)的 URL,并检查 Tweetie 是否可以查看该 URL。不可以。
一位 friend 在 Twitterific 中尝试了它。同样的问题。在 Safari 和维基百科应用程序中工作正常,但使用沼泽标准 UIWebView 的 iPhone 应用程序在处理维基百科页面时似乎存在问题。
为了完全确定没有其他变量,我创建了一个 simple test app只需加载一个 UIWebView http://en.wikipedia.com ,它失败并出现相同的错误(在末尾添加该代码)。
那么大家觉得怎么样呢?这只是一个UIWebView错误吗?有哪位苹果大佬知道这是怎么回事吗?
我是否错过了一些完全明显的事情,而我再次不穿裤子坐在火车上上类?
期待听到您的想法。请记住,昨天工作正常。
汇报(或者也许事后剖析更合适):</p>
谢谢Duncan的解决方案以及对这里发生的情况的非常清晰的描述。
看起来我最初看到错误的原因是,当我根本没有实现 didFailLoadWithError 委托(delegate)方法时,该方法的默认行为显然是清除 UIWebView 并因此终止请求。当我添加实现以了解发生了什么情况时,我插入了一些代码以将错误写入 View ,正如邓肯所指出的,这就是我遇到的问题。
忽略回调中的 -999 错误代码似乎是一个非常糟糕的解决方案,但我对管道胶带很满意。
我尝试了很多应用程序来测试这是否是 UIWebView 问题(Tweetie、Twitteriffic 等...),它们都有这个问题。看起来这对于开发人员来说可能是一个非常常见的疏忽。也许苹果可以在下一个版本中解决这个问题。
另一个有趣的点是,当我将 URL 切换为使用 http://en.m.wikipedia.com 时而不是http://en.wikipedia.com ,问题就消失了。
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
_webView = (UIWebView*)self.view;
_webView.delegate = self;
// load the url
// FAIL
//NSURL * newUrl = [[[NSURL alloc] initWithString:@"http://en.wikipedia.com"] autorelease];
// OK
NSURL * newUrl = [[[NSURL alloc] initWithString:@"http://www.stackoverflow.com"] autorelease];
NSURLRequest * newUrlRequest = [NSURLRequest requestWithURL:newUrl];
[_webView loadRequest:newUrlRequest];
}
// delegate stuff
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)req navigationType:(UIWebViewNavigationType)navigationType { return YES; }
- (void)webViewDidStartLoad:(UIWebView *)wv
{
// starting the load, show the activity indicator in the status bar
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// finished loading, hide the activity indicator in the status bar
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSURLErrorDomain
// load error, hide the activity indicator in the status bar
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[_webView loadHTMLString:[[[NSString alloc] initWithFormat:@"Failed to load page %@", [error localizedDescription]] autorelease] baseURL:nil];
}
最佳答案
看起来这里有一个答案:
How do I fix NSURLErrorDomain error -999 in iPhone 3.0 OS
这又指的是:
看起来你需要在 webView 中进行这样的修改:didFailLoadWithError: delegate:
if ([error code] != NSURLErrorCancelled) {
//show error alert, etc.
}
本质上,发生的事情是委托(delegate)遇到“取消”(-999)失败,这可能源于 javascript,甚至可能源于 UIWebView bug。
使用您的代码, WebView 根本不显示任何内容,因为您使用相同的 UIWebView 来显示错误。如果您刚刚对错误进行了 NSLog,那么您会看到失败,但是页面会加载得很好,从而提示您失败是伪造的。
关于iphone - 有没有人发现 UIWebView 对于某些 URL 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577670/
我正在寻找一种方法来观察 UIWebView 中文本选择已开始或结束的通知。一旦出现大头针和蓝色选择覆盖,它会自动更新 Javascript 选择和范围对象,但是当您点击选择并结束时,似乎没有一种干净
我需要获取 UIWebView 的 url在用户单击一次后显示。 我尝试在 UIWebView 下放置一个按钮,该按钮调用确定 url 的方法。 ,但这样按钮不起作用。我试过在 UIWebView 上
我正在使用 AFNetworking UIWebView 类别,我想知道是否有任何方法可以通过证书固定检查加载 url。 最好的问候, 最佳答案 UIWebView 没有向它公开任何直接 API,但它
我想从应用程序中禁用长触摸。我无法控制在 WebView 上加载的 HTML。 最佳答案 在 webViewDidFinishLoad委托(delegate)我在加载的 html 页面上运行一个禁用长
每个人: 我可以通过将scalesPageToFit 设置为YES 来启用缩放。但是,我如何知道 UIWebView 是否正在缩放? 有人知道吗? 提前致谢。 最佳答案 已解决。 向 XXXViewC
我在每个单元格中都有几个自定义单元格和 WebView 。现在,我的要求是找到要在 webview 上加载的 HTML 字符串的高度,然后根据此更改自定义单元格高度和 webview 高度。 我知道可
我想嵌入一个 UIWebView进入我的 MonoTouch 应用程序,用于尚未本地实现的区域。 为了对网站进行身份验证,我想设置一个包含当前 session key 的 cookie。 我尝试创建一
我的应用程序使用 UIWebview,它在 iOS 5 和 iOS 6 中运行良好。但是,当我在 Xcode 5 中构建并运行相同的代码时,它不会在 iOS 7 中加载网页。 - (void)web
我有一个嵌入式网站,有很多链接,但 WebView 窗口相当小,允许放大和缩小列表上方的较大图像。如果可能的话,我需要 webview 响应到带有第二个嵌入式 UIWebView 的新 Control
我正在 Monotouch 上构建 iPhone 应用程序。我的项目的一部分使用本地网站内容。我将网站使用的所有 html、js、css 和图像复制到一个文件夹中,并将其导入到我的 monotouch
在下面的示例中,infoScroller 是一个UIWebView,println(HTMLDescription) 打印一个可爱的 HTML 字符串。但是,尝试 loadHTMLString 会出现
我有一个包含多个 UIWebView 的应用程序。我有一个 UIWebView 保存所有业务逻辑和其他 UIWebViews 用于显示目的。但是,我发现如果 UIWebView 不是最后一个加载的,断
我的一个包含链接的 View Controller 底部有一个 Web View 。我想要做的是,当用户单击 Web View 中的一个链接时,它会打开一个 Web View ,该 View 占据屏幕
我已经在 webview 中实现了 ScrollView 的委托(delegate)。由于,iOS 5 默认 ScrollView 不再响应 didZoom 事件。为什么会出现这种行为? 最佳答案 i
我正在使用新的 Xcode UI Testing来自 XCTest Framework与 Xcode 7 GM .我有一个带有简单 UIWebView 的应用程序(它只是一个带有 web View 和
我无法从 UIWebView 响应中获取 header ,因为响应显然没有被缓存。有解决方法吗?我试过来自 here 的代码. 我的应用程序使用混合的原生 iOS View Controller 和
我想制作一个简单的应用程序,其中具有自定义内容的 UIWebView 将具有多个指向具有类似内容的其他页面的链接(顶部有一个导航栏,只有一个后退按钮)。我阅读了this的答案问题,但是我不确定是否应该
我制作了一个简单的测试项目,其中仅包含一个 UIWebView,其中 UIView 填充了窗口。当 UIWebView 的宽度与 UIView 相同时,一切正常。当UIWebView的宽度小于容器的宽
在我的 iPad 应用程序中,有一个显示文本内容的 UIWebview。当我按住并选择一个文本时,应该会弹出一个带有 2 个自定义菜单的菜单。 说,|菜单 1 |菜单2 | 但似乎 COPY 菜单也会
是否可以在 uiwebview.js 中加载应用商店链接。我尝试在 uiwebview 中打开它,但它没有加载到那里。我不希望用户在单击我的应用程序中的网址时离开我的应用程序。可能吗? 问候 潘卡杰
我是一名优秀的程序员,十分优秀!