2012-10-17 7 views
7

質問を参照してくださいここで説明したように(つまり、セッションを紛失したり、デバイスブラウザを開いたりすることなく)、外部ページをPhonegapビューにロードする正しい方法を見つけました:How can I load a webpage inside the phonegap webview? 、ここで:PhoneGap for iPhone: problem loading external URLphonegap:外部ページを開き、次にアプリケーションに戻る

次のステップは次のとおりです。私はextarnalページを開いた後に(それは私が所有していますし、私はそれを変更することができます)どのように私は戻って私のローカルアプリケーションに行くことができますか?外部ページにリンクがあり、クリック時にユーザーがphonegapアプリケーション内のローカルHTMLページ(mypage.html)にリダイレクトされるようにしたいとします。

リンクのhref属性にはどのようなURLがありますか?私は "file:///android_asset/www/mypage.html"に設定しようとしましたが、動作しませんでした。

答えて

3

ChildBrowserプラグインを使用して外部Webページを開きます。次に、ChildBrowser.onLocationChangeプロパティを独自の関数に設定します。リモートページから人が移動すると、ロケーションの変更が通知され、ChildBrowserを閉じて新しいローカルページに移動できます。リモートHTMLページに触れる必要はありません。

したがって、ユーザーがリモートのページから移動するとき、ブラウザを閉じるように:何が必要なのあなたのMainViewController.mで、この魅惑がある

cb.onLocationChange = function(loc){ 
    console.log("location = " + loc); 
    if (loc != "http://example.com") { 
     cb.close(); 
    } 
}; 
+0

ありがとうございます。ところで、これは別の問題の回避策なので、編集できない外部ページからローカルページに戻る方法はありますか?それはパラメータとしてコールバックURLを受け取ることができますか? –

+0

はい、できます。私はちょうど私の答えにいくつかのコードを追加しました。 –

+0

素晴らしい、ありがとう! –

1

それはコルドバ1.7.0コルドバ1.9.0で私の作品コードバス2.1.0

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

// 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"]) { 
[[UIApplication sharedApplication] openURL:url]; 
return NO; 
} 
else { 
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; 
} 
    } 
+0

ありがとうございます。これはかなり私はアンドロイドのためにcordovaでそれをチェックアウトするかなりのiphone関連のようです。 –

+0

はいiPhone関連です。あなたはcordova-androidに何の問題もないはずです。 – iOSAndroidWindowsMobileAppsDev

1

これはPhoneGap/Cordova 2.7を使用しています。あなたの外部アプリの中に、 "app:// index"を指すリンクを追加します。

内のonCreate追加:

this.appView.setWebViewClient(new CordovaWebViewClient(this, this.appView) { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if(url.equalsIgnoreCase("app://index")) { 
      Log.d("DEBUG", url); 

      loadUrl(Config.getStartUrl()); 

      return true; 
     } else { 
      return super.shouldOverrideUrlLoading(view, url); 
     } 
    } 
}); 

これは、呼び出しをインターセプトして構成された開始URLにユーザーをリダイレクトします。

関連する問題