将 webview 请求抛出到另一个 webview
Posted
技术标签:
【中文标题】将 webview 请求抛出到另一个 webview【英文标题】:Throwing webview request to another webview 【发布时间】:2009-04-20 15:09:57 【问题描述】:我有一个 UIViewController,里面有一个 UIWebView (webview1)。网页视图只有几行文本,但里面确实有一个链接。我不想在这个狭小的空间中打开指向外部网站的链接,而是将其发送到 webview2,这将是一个全屏。目标是将网络请求保留在我的应用程序中,而不是 Safari 中。我不想为 webview2 创建另一个控制器,而是使用 webview1 的控制器。
在 Webview1Controller 控制器中,我在 webViewLoad 中执行此操作:
webview1.delegate = self;
这是我将 Web 请求交给 webview2 的地方,效果很好:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
myapp *delegate = [[UIApplication sharedApplication] delegate];
Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil];
//self.view = webview2;'
[delegate.navigationController pushViewController: webview1Controller animated:YES];
[webview1Controller.webview2 loadRequest:request];
[webview1Controller release];
return YES;
在 Interface Builder 中,我将 webview2.xib 文件的 Owner 类设置为 Webview1Controller。它的“视图”和 webview2outlet 已连接。我在 Webview1Controller 中有一个名为 webview2outlet 的 IBOutlet。
当我返回 webview1 时,它也加载了相同的请求。有没有办法阻止 webview1 加载任何东西?如果我在上述方法中返回 NO,webview1 将不会呈现我的内容。
一种解决方案就是在 viewWillAppear 上重新加载 webview1 内容,这很有效。但是有没有更好的方法?
【问题讨论】:
【参考方案1】:从委托方法返回NO
。
关于您的评论,我认为您想要做的是让您的委托方法检查哪个 webview 正在调用您的控制器:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
if (webView == webview1)
Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil];
[self.navigationController pushViewController:webview1Controller animated:YES];
[webview1Controller.webview2 loadRequest:request];
[webview1Controller release];
return NO;
else
return YES;
(另外请注意,UIViewController 有一个 navigationController
属性,因此您可以使用它而不是通过您的应用委托获取它)。
【讨论】:
【参考方案2】:如果您加载请求的副本而不是原始请求,然后返回 NO,会发生什么情况?
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
myapp *delegate = [[UIApplication sharedApplication] delegate];
Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil];
//self.view = webview2;'
[delegate.navigationController pushViewController: webview1Controller animated:YES];
[webview1Controller.webview2 loadRequest:[[request copy] autorelease]];
[webview1Controller release];
return NO;
【讨论】:
返回 NO 会导致 webview1 为空白。当主视图加载时,上述方法也会触发。因为它会导致一个空白的 webview1,所以永远不会有任何链接可以点击。以上是关于将 webview 请求抛出到另一个 webview的主要内容,如果未能解决你的问题,请参考以下文章
javascript 提供用于从React-Native WebView发送和接收消息的示例实现(使用postMessage / onMessage WebVie)
swift 构建OSX拖放操场:将dragndrop.swift抛出到共享源中,然后测试单个playgro中的示例