gpt4 book ai didi

ios - 使用 safari 打开 ChildBrowser 中的外部链接?

转载 作者:行者123 更新时间:2023-11-28 17:33:31 26 4
gpt4 key购买 nike

我目前正在使用 phoneapp 中的 ChildBrowser 打开网站。但是,我想打开此网站的所有外部链接以在 Safari 中打开。

我无法控制本网站的来源。

我的理解是,我必须修改 ChildBrowser 以在 Safari 中打开所有以“http”开头的链接。

我不能完全阅读 Objective-C,但我相信下面的代码是相关的。

- (void)loadURL:(NSString*)url
{
NSLog(@"Opening Url : %@",url);

if( [url hasSuffix:@".png" ] ||
[url hasSuffix:@".jpg" ] ||
[url hasSuffix:@".jpeg" ] ||
[url hasSuffix:@".bmp" ] ||
[url hasSuffix:@".gif" ] )
{
[ imageURL release ];
imageURL = [url copy];
isImage = YES;
NSString* htmlText = @"<html><body style='background-color:#333;margin:0px;padding:0px;'><img style='min-height:200px;margin:0px;padding:0px;width:100%;height:auto;' alt='' src='IMGSRC'/></body></html>";
htmlText = [ htmlText stringByReplacingOccurrencesOfString:@"IMGSRC" withString:url ];

[webView loadHTMLString:htmlText baseURL:[NSURL URLWithString:@""]];

}
else if ( [url hasPrefix:@"http" ])
{
//I have added in this else if.
}
else
{
imageURL = @"";
isImage = NO;
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[webView loadRequest:request];
}
webView.hidden = NO;
}

有什么建议吗?

最佳答案

我发现执行此操作的最简单方法是,如果您知道最初将使用 childBrowser 请求的域主机名并且您不打算请求任何其他域,那么您可以将此事件直接写入ChildBrowserViewController.m 文件。

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request     navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
NSString* domain = [url host];

// Intercept the external http requests and forward to Safari.app
// Otherwise forward to the PhoneGap WebView
if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"] || [[url scheme] isEqualToString:@"www"]) {
if ( [domain isEqualToString:@"YOURDOMAIN.NAME] ) {
return YES;
} else {
[[UIApplication sharedApplication] openURL:url];
return NO;
}
} else {
return YES;// [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
}

这将捕获 childBrowser 发出的所有请求,如果它们符合标准 URL 约定(以 HTTP、HTTPS 或 WWW 开头)并且它们不是您预设的域名主机名,那么它将强制它们在 Safari 中打开。然后,当用户返回到您的应用时,他们仍将位于他们单击链接时所在的上一页。

我搞砸了好几个小时,直到我想出了这个。

如果您需要能够使用 childBrowser 打开多个域名托管服务商,但仍希望每个域名托管服务商都能在 Safari 中打开所有从当前域名引出的外部链接,我建议如下。

将以下内容添加到ChildBrowserViewController.h

BOOL scaleEnabled;
BOOL isImage;
NSString* originalURL; <- THIS RIGHT HERE
NSString* imageURL;

还有这个

@property(retain) NSString* imageURL;
@property(retain) NSString* originalURL; <- THIS RIGHT HERE
@property(assign) BOOL isImage;

然后将以下内容添加到ChildBrowserViewController.m

@synthesize imageURL;
@originalURL; <- THIS RIGHT HERE
@synthesize supportedOrientations;
@synthesize isImage;

并添加以下内容

- (void)loadURL:(NSString*)url
{
originalURL = url; <- THIS RIGHT HERE
NSLog(@"Opening Url : %@",url);

然后在我上面发布的方法中更改以下内容

    NSURL *url = [request URL];
NSString* domain = [url host];

NSURL *oURL = [NSURL URLWithString: originalURL]; <- THIS RIGHT HERE
NSString* oDomain = [oURL host]; <- THIS RIGHT HERE

// Intercept the external http requests and forward to Safari.app
// Otherwise forward to the PhoneGap WebView
if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"] || [[url scheme] isEqualToString:@"www"]) {
if ( [domain isEqualToString:oDomain] ) { <- THIS RIGHT HERE
return YES;
} else {

我还没有测试第二部分,但它应该可以正常工作。

祝你好运。

关于ios - 使用 safari 打开 ChildBrowser 中的外部链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10528756/

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