1

私は現在、phoneappでChildBrowserを使用してWebサイトを開いています。ただし、このWebサイトのすべての外部リンクを開いてSafariで開きたいと思います。

私はこのウェブサイトのソースを管理できません。

私の理解では、Safariで「http」で始まるすべてのリンクを開くには、ChildBrowserを変更する必要があります。

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;
}

何かアドバイス?

4

1 に答える 1

0

これを行うために私が見つけた最も簡単な方法は、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 {

この2番目の部分はテストしていませんが、問題なく動作するはずです。

幸運を。

于 2012-08-02T01:46:02.870 に答える