27

PhoneGap 1.6.1 にアップグレードしたところ、外部 URL を Safari で開くことができなくなりました。

このバージョンの前に、次のように AppDelegate.m にパッチを当てていました。

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    if ([[url scheme] isEqualToString:@"http"]) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    } else {
        return [self.viewController webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
    }
}

以前にも同様の質問があったことに気付きました: アプリの UIWebView ではなく、Safari で外部リンクを開くにはどうすればよいですか?

しかし、この回答はバージョン 1.6.1 では機能しなくなったようです。

また、Cordova.plist で OpenAllWhitelistURLsInWebView を設定しようとしましたが、どちらの設定でも Safari は得られません。

前もって感謝します。

4

12 に答える 12

42

新しい URL でリンクを開く最良の方法は、実際にはwindow.open. ターゲットを「_system」として設定するだけです:

window.open("http://stackoverflow.com", "_system");

ドキュメントでこれを見つける前に、実際に同じことを行うプラグインを作成しました。この回答はここに残しておきます。これにより、リンクの処理をより細かく制御できるようになるからです。

PhoneGap 2.3 以降では、Mobile Safari で URL を開くことができませんでした。_blank の使用は機能せず、window.open(url, '_blank') を試しましたが、これで InAppBrowser プラグインを使用して URL が開きます (これはかなりひどいものです)。あれがプラグインを使っているのは面白いと思ったので、iOS アプリで URL を開く標準的な方法を使用して URL を開くプラグインを作成することにしました。この要点でコードを確認/取得できます: https://gist.github.com/typeoneerror/5097118 。

私の例では、「_blank」というクラスを持つリンクを jQuery で接続し、プラグイン呼び出しでそれらの URL を開きました。

// execute the plugin called OpenUrl, signature:
// exec(successCallback, errorCallback, pluginName, pluginMethod, params)
cordova.exec(success, error, "OpenUrl", "openUrl", [url]);
于 2013-03-06T06:25:30.563 に答える
9

これを MainViewController.m で使用しました

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    //HACK to make url open in safari
    if (range.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}
于 2013-10-22T11:15:59.730 に答える
8

以前のバージョンの cordova では、リンクに target="_blank" を追加することで、ブラウザーに URL を読み込むことができました。しかし今では、inApp ブラウザ機能を使用できます。

var ref = window.open(encodeURI('your url'), '_system', 'location=no');

これにより、ブラウザーで URL が開きます。cordova2.7.0を搭載したAndroidおよびiPhoneでテスト済み

于 2013-07-25T04:48:15.870 に答える
5

Cordova 1.6.1 にアップグレードした後も同じ問題が発生しました。

target="_blank" リンクに追加してみて ください。

それは私にとってはうまくいきました。

于 2012-04-22T16:13:06.243 に答える
3

ソリューションを簡素化しようとすると、これが最終的に PhoneGap/Cordova 2.5.0 と jQuery 1.9.1 を使用した結果です

  • OpenAllWhitelistURLsInWebView は問題ではありません。true、false に設定したり、省略したりしても、結果には何の影響もないようです。
  • URL には、次のように _system のターゲットがあります。<a target="_system" href="https://rads.stackoverflow.com/amzn/click/com/B009CZICQ8" rel="nofollow noreferrer">
  • 次に、次のように呼び出します。

    $("a[target='_system']").click(function(event) {
    
        event.preventDefault();
        window.open($(this).attr("href"), "_system");
    });
    
于 2013-03-21T04:01:29.473 に答える
3

これを行う:

<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>
于 2013-06-08T01:21:59.430 に答える
2

Phonegap / Cordova 1.7 を使用すると、これを行うだけで、JavaScript の外部ブラウザーで URL を開くことができました。

window.location.href = "http://www.google.com";

また、Cordova.plist で OpenAllWhitelistURLsInWebView を NO に設定しています。

于 2012-06-21T15:44:19.687 に答える
2

Phonegap を使用している場合、これは 100% 保証されたソリューションです (iOS 6 でテスト済み)。

Safari で外部 URL を開くには、次の操作を行います。

  1. リンクを外部ホスト(ホワイト リスト) に追加します。例えば:http://google.com/
  2. Cordova.plistまたはで、からにPhonegap.plist変更します。OpenAllWhitelistURLsInWebViewYesNo
  3. target="_blank"アプリケーションで、リンクに追加します。例:

    <a href="http://google.com" target="_blank">Google.com</a>
    

ありがとうございました。

于 2012-11-10T20:12:35.147 に答える
1

このメソッドは以前は /Classes/[yourAppName]AppDelegate.m にあり、現在は /Classes/MainViewController.m にあると思います。動作するかどうかを確認するためにそこに移動しました。

于 2012-05-02T22:13:18.267 に答える