ブラウザでのリンクを開く電話ギャップ


114
<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>

ちょっとエキスパート私はphonegap 2.9.0を使用していますが、上記のコードを使用してブラウザでリンクを開いていますが、同じアプリでリンクを開いています......サファリブラウザを開く方法は?

同じアプリでウェブサイトを開き、アプリに戻ることができないため、アプリを削除して再度インストールする必要があります。


_blank外部ブラウザーと_selfWebView を開く場合は、2015年のCordova 5.1.1ソリューションを確認してください:stackoverflow.com/a/32227524/82609
Sebastien Lorber '28

同様の質問の回答もご覧ください:stackoverflow.com/a/26176013/1480587およびstackoverflow.com/a/46619378/1480587
Peter T.17年

回答:


225

同様の質問で提案されているようにInAppBrowserのドキュメントに従って、JavaScriptを使用window.openしてtarget引数をに設定し_system呼び出します

<a href="#" onclick="window.open('http://www.kidzout.com', '_system'); return false;">www.kidzout.com</a>

これは機能するはずですが、より優れた、より柔軟なソリューションはclick、すべてのリンクのイベントをインターセプトwindow.openし、リンクの属性から読み取られた引数で呼び出すことです。

これを機能させるには、InAppBrowserプラグインをインストールする必要があります。

cordova plugin add cordova-plugin-inappbrowser

3
はい、私もコルドバ1.7.0で同じtarget = "_ blank"を使用しましたが、2.9.0で作業していますが、それは私を困らせています。あなたのsujjestionも機能しません...... :(
ahsan ali

6
はい、私も試してみました。あなたが共有したリンクもたどりました。あなたの助けに感謝しますが、問題はまだあります。サイトはまだアプリで開いています...... :(
ahsan ali

こんにちは、あなたの問題は何ですか?私も同じ問題を抱えていると思います。
whossname 2013

3
これを機能させるには、InAppBrowserプラグインをインストールする必要があります。手順は次のとおりです。cordova.apache.org
docs

7
私は同じ問題を抱えています..解決策が機能していません:(通常のリンクと同じように開きます(Androidの場合)
Daniel

29

他の投稿で回答されているように、プラットフォームごとに2つの異なるオプションがあります。私がしていることは:

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}

ご覧のとおり、私はデバイスプラットフォームをチェックしており、それに応じて別の方法を使用しています。標準的なブラウザの場合、私は標準的な動作のままにしておきます。これからは、ソリューションはAndroid、iOS、ブラウザで正常に動作しますが、HTMLページは変更されないため、URLを標準のアンカーとして表すことができます

<a href="http://stackoverflow.com">

ソリューションにはInAppBrowserおよびデバイスプラグインが必要です


すばらしい答えです。他の人が使用できない場合に備えて、www / cordova_plugins.jsにデバイスとinappbrowserの両方の構成が含まれていることを確認してください。プラグインをインストールすると、jsとpluginsの設定がステージングフォルダーに追加され、プライマリの作業wwwフォルダーには追加されません。構成と場所を整理したら、これは完全に機能しました。
Michael Bordash 2014年

1
これが一番の答えです!次の方法でInAppBrowserプラグインをインストールしていないことを覚えておいてください$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
。– tixastronauta

誰かがスニペットに貢献したいのなら、私はそれを要旨にアップロードしました。gist.github.com/redolent/e79722b32a48a536b5ba
しのばせる

28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

AndroidとPG 3.0で動作します


Android 2.3.7と4.2.2の両方で、まだ失敗するようです。
user569825 2013年

2
Cordova 3.3.0を搭載したAndroid 4.4.2で動作します。ただし、iOS 6.1では機能しません。
マーサー、2014年

コルドバ3.3.0のおかげで機能しました。おかげで、どこでこの情報を入手できましたか?ドキュメントで見つかりませんでした。
Teoman Shipahi 2014

これは、cordova 3.4.1とandroid 4.2で私にとってはうまくいきました。プラグインは必要ありませんでした。iOS7でのテスト後に報告します。
pgsandstrom 2014年

これは、Androidで私のために機能した唯一のソリューションです。ありがとう
Niraj Chauhan 2014

21

AndroidとiPhoneでURLを開く方法は2つあります。

FOR IOSは次のコードを使用します。

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

Android OSの場合は、次のコードを使用します。

navigator.app.loadUrl("http://google.com", {openExternal : true});

Cordova window.open("http://google.com", '_system')も同様に使用できます。は使用しnavigator.app.loadUrlないでくださいmarket://。URL では機能しないため、この場合、アプリが閉じられ、同じウィンドウで開かれるだけです。常に望ましいとは限りません。
アガメムス2014年

1
アガメムナス、私のphonegap 3.6アプリケーションでandroid。でwindow.openが機能していません 私はそれを機能させるために、この答えでソリューションを使用する必要があります。
Moulde

10

ついにこの投稿がiOSで私を助けてくれます:http : //www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/

「CDVwebviewDelegate.m」ファイルを開いて「shouldStartLoadWithRequest」を検索し、次のコードを関数の先頭に追加します。

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

navigator.app.loadUrl("http://google.com", {openExternal : true});Android用に使っても大丈夫です。

Cordova 3.3.0経由。


これは3.0.0で私のために働いた唯一のものです。ありがとうございました!!
ロックラン、2014年

3.0では、InAppBrowserプラグインを含める必要があります。しかし奇妙に見えるかもしれません。
Sean Bannister 2014

MainViewController.mで1つ上のレイヤーに変更します。if([[url scheme] isEqualToString:@ "file"] || [[url scheme] isEqualToString:@ "gap"]){return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType]; } else {[[UIApplication sharedApplication] openURL:url]; NOを返します。}}
Gamadril

10

これらの回答はどれも、外部リンクを各プラットフォームで開くことができるほど明確ではありません。あたりとしてinAppBrowserドキュメント

インストール

cordova plugin add cordova-plugin-inappbrowser

window.openを上書きします(オプションですが、簡単にするためにお勧めします)

window.open = cordova.InAppBrowser.open;

を上書きしない場合window.open、ネイティブwindow.open関数を使用することになり、クロスプラットフォームで同じ結果が得られるとは期待できません。

デフォルトのブラウザでリンクを開くために使用します

window.open(your_href_value, '_system');

inAppBrowserのターゲット(プラグイン名が使用することを示唆しているもの)は'_blank'、ではなくであることに注意してください'_system'


上記の手順がないと、デフォルトのブラウザーアプリのクロスプラットフォームで開くリンクを取得できませんでした。

追加クレジット

次に、リンクの(ライブ)クリックハンドラーの例を示します。

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});

正確にどこでwindow.openをオーバーライドしますか?ウェブサイトまたはコルドバアプリ
Ellisan

好ましくは、index.htmlページにロードするJavaScriptファイルの先頭(それが役立つ場合は、Webサイト)
bozdoz

7

たまたまjQueryがある場合は、次のようにリンクのクリックを遮断できます。

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});

これにより、HTML内のリンクを変更する必要がなくなり、時間を大幅に節約できます。これをデリゲートを使用して設定しました。そのため、2番目の引数として「a」タグを使用して、ドキュメントオブジェクトに関連付けられているのがわかります。このように、いつ追加されたかに関係なく、すべての「a」タグが処理されます。

もちろん、引き続きInAppBrowserプラグインをインストールする必要があります。

cordova plugin add org.apache.cordova.inappbrowser

これは私が使用する素晴らしいアイデアですが、直接window.open呼び出しにも注意してください(すべてがリンクを通過するわけではありません)
Sebastien Lorber

3
window.open('http://www.kidzout.com', '_system');

機能しますが、inappbrowserプラグインがインストールされている場合のみです。ターミナルを使用してインストールするには、プロジェクトのwwwフォルダーを参照し、次のように入力します。

phonegap plugin add org.apache.cordova.inappbrowser

または

cordova plugin add org.apache.cordova.inappbrowser

次に、ブラウザでリンクが開きます。


コマンドphonegap local <command>は廃止されました。コマンドはに委任されましたphonegap <command>。コマンドphonegap local <command>は間もなく削除されます。
Ajay Suwalka 14

昔はわかりませんが、最近はこのプラグインをインストールするのが正しいですcordova plugin add cordova-plugin-inappbrowser
Plinio FM

2

Cordova 5.0以降では、プラグインInAppBrowserはCordovaプラグインレジストリーで名前が変更されているため、次を使用してインストールする必要があります。

cordova plugin add cordova-plugin-inappbrowser --save

次に使用します

<a href="#" onclick="window.open('http://www.kidzout.com', '_system');">www.kidzout.com</a>


1

iOSに重点を置いたPhoneGapビルド(v3.4.0)を使用しています。PhoneGapがInAppBrowserプラグインを認識するには、config.xmlにこのエントリを含める必要があります。

<gap:plugin name="org.apache.cordova.inappbrowser" />

その後、window.open(url、target)を使用すると、期待どおりに機能するはずです


1
私はm also using PhoneGap Build (v3.5.x) and added the plugin via the config.xml. But what i get is an InAppBrowser without controls an cannot call the safari browser. I単にwindow.open()を使用しています。何かアドバイス?
Reinos 2014

正しく設定されていれば、window.openが機能するはずです。私の状況では、window.openが別のブラウザーのURLを開いており、問題なく動作します。URLに問題がないことを確認してください。
contactmatt 2014

Phonegap Buildでこれを試したところ、「plugin unsupported:org.apache.cordova.inappbrowser」
David Ball

1

私はまた、ブラウザでリンクが開かないという問題に直面しました。これは私の手順の修正です:

1:このCordovaプラグインをインストールします。

cordova plugin add cordova-plugin-inappbrowser

2:以下のようにHTMLにオープンリンクを追加します。

<a href="#" onclick="window.open('https://www.google.com/', '_system', 'location=yes');" >Google</a>

3:これは私が多くの問題に直面したため、これは最も重要なステップcordova.jsです:ファイルをダウンロードしてwwwフォルダーに貼り付けます。次に、これをindex.htmlファイルで参照します。

<script src="cordova.js"></script>

このソリューションは、AndroidとiPhoneの両方の環境で機能します。


-2

このような :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.