gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:43:55 25 4
gpt4 key购买 nike

这个问题可能看起来有点奇怪/怪异,但我有两个 UIWebView,其中一个设置为隐藏在 .xib 文件中,并且它的委托(delegate)设置为我的 View Controller 。第二个 UIWebView 用于解析和“清理”隐藏的 UIWebView 中的 html,并将其作为“移动化”页面显示给用户。我的 .xib 文件中的非隐藏 UIWebView 上没有委托(delegate)。

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

有什么办法可以解决这个问题吗?感谢您提供的任何回复!如果我没有清楚地说明我的问题,请告诉我!

部分代码:

.h:

#import <UIKit/UIKit.h>

@interface Web : UIViewController <UIWebViewDelegate>

@property (nonatomic, strong) NSURL *url;

@end

.m:

#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])];
}

最佳答案

您可以实现委托(delegate)方法

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

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

关于iphone - 两个 UIWebView,如何设置第二个 webview,以便在单击链接时将它们发送到第一个 webview 进行加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13755470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com