これは私を夢中にさせます。私はIonicアプリ(Cordova、Angularなど)に取り組んでいます。mailto:hrefを含むお問い合わせリンクがあります。
href="mailto:[email protected]?subject=my%20App"
SOで削除する必要があると言っている無数の投稿を読みました
<access Origin="*"/>
プロジェクトルートのconfig.xmlから、次のものに置き換えます。
<access Origin="mailto:*" launch-external="true" />
私がやったこと。 ionic build
を実行すると、platforms/Android/res/xml
のconfig.xmlに追加されます。しかし、リンクを実行しても、Androidシミュレーターでメールアプリが開かれません(シミュレーターでメールが構成されている場合でも)。
悲しいことに、テストするデバイスがありません。これは単なるエミュレーターなのでしょうか、それとも何か不足していますか?
cordovaプラグインホワイトリスト をインストールする必要があります。
cordova plugin add cordova-plugin-whitelist
または、config.xmlファイルへの参照を保存する場合:
cordova plugin add cordova-plugin-whitelist --save
また、インテントをconfig.xmlファイルに追加する必要があることを確認します。
<allow-intent href="mailto:*" />
より多くの情報を見つけることができます こちら 。
上記の回答と記事のおかげでこれを解決しました。上記の投稿以降、何が変わったのか、何が変わったのかはわかりませんが、他の人の参照のためです。 http://, https://, tel:, & mailto:
は、 inappbrowser プラグインのみで動作し、config.xmlを手動で編集する必要はありません。上記のすべてを実行したが、まだ機能していなかったので、いじり始めたところ、window.open()
呼び出しが正しく機能するために"_system"
の2番目のパラメーターが必要であることがわかりました(ブラウザーを使用しようとしましたが、 http://mailto:xxx...
フラグなしで"_system"
に「移動」します)。
しかし、好奇心のために、ホワイトリストプラグインをアンインストールし、config.xmlの手動編集を削除しましたが、引き続き機能します。
ノート:
-試したすべてのバリエーションを覚えていませんが、onclickはIonic/Angular/Cordovaスコープにアクセスできなかったため、ng-clickを使用しました。
-href = "..."をオプションと一緒に使用したことはありませんでした。 (覚えている場合は、テストして結果を反映するように更新します。)
したがって、onlycordova-plugin-inappbrowserがインストールされ、noconfig .xmlの編集、ここに私の作業/テスト済みのソリューションを示します。
ng-click="window.open('http://somesite.com', '_system')"
ng-click="window.open('https://google.com', '_system')"
ng-click="window.open('tel:(123) 345-4567')"
ng-click="window.open('mailto:[email protected]', '_system')"
2016年9月20日のテスト:
HTC One M8、Android 6、cordova v6.3.1、cordova-plugin-inappbrowser v1.5.0、ionic v2.0.0、jdk1.8.0_101、= Android SDK 21、23、および24がインストールされている
これを試して:
window.location.href = "mailto:[email protected]?subject=Works on iOS too";
今日これに走り込んだところ、mailtoリンクに影響を与えたが、telリンクには影響を与えなかったことがわかりました。
Daveの回答で説明されているように、インテントをcordova configに追加する
<allow-intent href="mailto:*" />
また、ページのcspヘッダーでmailtoリンクを許可する必要がありました
<meta http-equiv="Content-Security-Policy" content="default-src 'self' mailto:*">
CSPヘッダーのこの動作に関するドキュメントは表示されませんでした。
「true」を「yes」に置き換えたらどうなりますか。これをアプリで使用すると動作します。
<access Origin="tel:*" launch-external="yes"/>
変更 CordovaのWhiteListPlugin in config.xml
うまくいかなかった-<access >,
`。上記を含む多くの組み合わせを試しました。これらが必ずしも機能しないということではなく、単に私のセットアップでは機能しません。 (ブラウザ、Android、およびiOS用のビルド)
ただし、 Cordova InAppBrowserプラグイン を使用すると動作しました:
上記のように、inAppBrowserプラグインを使用して、ターゲットを_systemに設定します。
これにより、iOSで発生していたunsupported url
、およびネイティブシステムWebブラウザーを起動します(つまり、URL呼び出しを許可するためにWhiteListPluginに依存しません)。
お役に立てれば。
Cordovaバージョン6.3.1。
Cordova WhiteList Plugin を使用するだけです。
それはこのように私のために働いた:in config.xml
<access Origin="*"/>
<access Origin="mailto:*" launch-external="true" />
<allow-intent href="mailto:*" launch-external="yes"/>
そして特別にios用に追加:
<platform name="ios">
<allow-navigation href="mailto:*" launch-external="yes"/>
...
<platform name="ios">