2012-05-10 5 views
1

私は現在phoneappでChildBrowserを使用してウェブサイトを開いています。しかし、このウェブサイトの外部リンクをすべて開き、Safariで開くことを希望します。ChildBrowserの外部リンクを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; 
} 

アドバイスはありますか?

答えて

0

私が見つけた最も簡単な方法は、最初にchildBrowserでリクエストするドメインホスト名を知っていて、他のドメインをリクエストする予定がない場合、このイベントをすぐに書き込むことができますChildBrowserViewController.mファイル。

​​

これは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; 

その後

0123をChildBrowserViewController.m

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

に以下を追加し、以下を追加するには、次を追加します。

そして私は

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 { 

次のように変更の上に掲示する方法で、私はこの第二の部分をテストしていませんが、それはうまく動作するはずです。

幸運。

関連する問題