Iphone 两个UIWebView,如何设置第二个webview,以便在单击链接时将其发送到第一个webview进行加载?

Iphone 两个UIWebView,如何设置第二个webview,以便在单击链接时将其发送到第一个webview进行加载?,iphone,objective-c,ios,ipad,uiwebview,Iphone,Objective C,Ios,Ipad,Uiwebview,这个问题可能看起来有点奇怪,但我有两个UIWebView,其中一个设置为隐藏在.xib文件中,它的委托设置为我的视图控制器。第二个UIWebView用于解析和“清理”隐藏UIWebView中的html,并将其显示为用户的“移动”页面。my.xib文件中的非隐藏UIWebView上没有委托 我遇到的问题是,当第二个UIWebView完成加载时,用户点击第二个UIWebView中的链接,它完成加载未解析的网页,因为它没有发送此链接,请单击返回要加载的隐藏UIWebView,以便第二个UIWebVie

这个问题可能看起来有点奇怪,但我有两个UIWebView,其中一个设置为隐藏在.xib文件中,它的委托设置为我的视图控制器。第二个UIWebView用于解析和“清理”隐藏UIWebView中的html,并将其显示为用户的“移动”页面。my.xib文件中的非隐藏UIWebView上没有委托

我遇到的问题是,当第二个UIWebView完成加载时,用户点击第二个UIWebView中的链接,它完成加载未解析的网页,因为它没有发送此链接,请单击返回要加载的隐藏UIWebView,以便第二个UIWebView在完成加载时可以解析它。我的两个UIWebView是我的.m文件中的属性

我有办法解决这个问题吗?我非常感谢您的回复!如果我没有把问题说清楚,请告诉我

一些代码:

.h:

#导入
@界面Web:UIViewController
@属性(非原子,强)NSURL*url;
@结束
.m:

#导入“Web.h”
@接口Web()
@属性(非原子,强)IBUIWebView*webView2;
@属性(非原子,强)ibuiwebview*webView;
@属性(非原子,强)NSMutableString*输出;
@属性(非原子,强)NSString*包装器;
@结束
@实现Web
-(BOOL)webView:(UIWebView*)webView应加载WithRequest:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)导航类型
{   
if(webView==self.webView2)
{
[self.webView加载请求:(NSURLRequest*)请求];
}
其他的
{
[self.webView加载请求:(NSURLRequest*)请求];
}
返回否;
}
-(无效)viewDidLoad
{
[超级视图下载];
[self.webView加载请求:[nsurlRequestRequestWithURL:self.url]];
}
-(无效)webViewDidFinishLoad:(UIWebView*)webView
{   
[自我清理];
[self.webview 2 loadHTMLString:self.output baseURL:nil];
}
-(无效)清理
{
NSString*input=[self.webView stringByEvaluatingJavaScriptFromString:@“document.getElementById(\“ctl\u ctl\u cphBody\u cphCenter\u divHtml\”)。innerHTML;”;
NSString*breadcrumbString=[self.webView stringByEvaluatingJavaScriptFromString:@“document.getElementsByClassName('breadcrumb')[0].outerHTML;“];
if(UI\u USER\u INTERFACE\u IDIOM()==UIUserInterfaceIdiomPad)
{
self.wrapper=@;
}
其他的
{
self.wrapper=@;
}
self.output=[nsmutablestringwithstring:self.wrapper];
[self.output insertString:input atIndex:147];
[self.output replaceCurrencesofString:breadcrumbString with string:@”选项:NSCaseInsensitiveSearch范围:NSMakeRange(0,[self.output length]);
}

您可以实现委托方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

这使您可以拦截加载请求并取消它们。然后,您可以从请求中获取URL并将其交给隐藏的webview。唯一需要注意的是,IIRC,即使您使用
-loadRequest:
加载自己的请求,也会调用此方法,因此您需要检查
导航类型
参数。

您应该能够使用
-(BOOL)webView:(UIWebView*)webView应该使用
-loadwithrequest:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)navigationType
。将请求转发到第一个webView并返回
NO
,以防止第二个webView加载页面。

您能详细说明一下吗?我在上面用
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)编辑了我的代码请求navigationType:(UIWebViewNavigationType)上面的navigationType
方法,但它对我不起作用。我能够从第二个Web视图中获取请求的url并将其馈送到隐藏的Web视图中,但它不能正常工作;我的NSLog显示请求的url大约为空,它继续加载,但没有“移动”加载的网页。具体地说,当我尝试以下代码时:
[self.webView loadRequest:self.webView2.request];
它加载一个空白页面,其中仅包含我的包装字符串,没有任何内容。
#import "Web.h"

@interface  Web()

@property (nonatomic, strong) IBOutlet UIWebView *webView2;
@property (nonatomic, strong) IBOutlet UIWebView *webView;
@property (nonatomic, strong) NSMutableString *output;
@property (nonatomic, strong) NSString *wrapper;

@end

@implementation Web

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{   
    if(webView == self.webView2)
    {
        [self.webView loadRequest:(NSURLRequest*)request];
    }
    else
    {
        [self.webView loadRequest:(NSURLRequest*)request];
    }
    return NO;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{   
    [self cleanUp];

    [self.webView2 loadHTMLString:self.output baseURL:nil];
}

- (void)cleanUp
{
    NSString *input = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"ctl_ctl_cphBody_cphCenter_divHtml\").innerHTML;"];

    NSString *breadcrumbString = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('breadcrumb')[0].outerHTML;"];

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        self.wrapper = @"<html><meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"/><meta name=\"viewport\" content=\"initial-scale = 1.37,maximum-scale = 2.0\"/></html>";
    }
    else
    {
       self.wrapper = @"<html><meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"/><meta name=\"viewport\" content=\"initial-scale = 0.57,maximum-scale = 2.0\"/></html>";
    }

    self.output = [NSMutableString stringWithString:self.wrapper];
    [self.output insertString:input atIndex:147];

    [self.output replaceOccurrencesOfString:breadcrumbString withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [self.output length])];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType