私はCordovaアプリを持っています、それは単一のHTMLファイルを持つ単一ページアプリケーションです。
すべてのリンクがシステムブラウザで開くはずです。 「埋め込まれた」InAppBrowserは必要ありませんが、実際にはネイティブシステム/外部ブラウザが必要です。
どこでも、次のようなInAppBrowserを使用したコードの例を見つけることができます。
window.open('http://Apache.org', '_system');
しかし、組み込みブラウザーを使用する予定がないのに、なぜInAppBrowserをインストールする必要があるのでしょうか。
リンクのターゲットに関して、誰かがWebViewの動作と思われるものを実際に説明できますか? target=_blank
で何をするのかは明確ではありませんが、新しいブラウザウィンドウを開く以外にできることは何もありません。
Android(Crosswalkプラグインを使用)でtarget=_blank
を使用すると、常に正常に動作し、新しいネイティブブラウザウィンドウで開くように見えるため、問題はiOSでのみ発生するようです。
だから私は自分の質問に私が見つけたもので答えています。 Cordova 5.1.1でiOSおよびAndroid(Crosswalkプラグインを使用)のみを扱っていることに注意してください。他のプラットフォーム/バージョンには適用されない場合があります。
埋め込みブラウザが必要ない場合でも、InAppBrowserプラグインが必要です。これにより、_system
ターゲットが使用可能になり、ネイティブプラグインコードがトリガーされてシステム/外部ブラウザが開きます。
したがって、プラグインはどういうわけか「2 in 1」プラグインのようです。組み込みブラウザの使用を許可し、外部システムブラウザを安全に強制的に開くことを許可します。
デフォルトのWebViewの動作が_blank
リンクに関連してどうあるべきかは明確ではありませんが(WebViewに対して何らかの方法で標準化されているかどうかも)、このプラグインまたはネイティブなしでiOSで外部ブラウザーを開く方法が見つかりませんでしたコード。
_self
を開き、ネイティブブラウザで_blank
を開きます私のように、埋め込みブラウザは気にしませんが、既存のアプリでネイティブ外部ブラウザのすべての_blank
ターゲットを、それほど苦労せずに開きたいだけです(特に、アプリがモバイルWebサイトの場合)。 ..)、アプリの先頭で次のコードを実行できます。
function openAllLinksWithBlankTargetInSystemBrowser() {
if ( typeof cordova === "undefined" || !cordova.InAppBrowser ) {
throw new Error("You are trying to run this code for a non-cordova project, " +
"or did not install the cordova InAppBrowser plugin");
}
// Currently (for retrocompatibility reasons) the plugin automagically wrap window.open
// We don't want the plugin to always be run: we want to call it explicitly when needed
// See https://issues.Apache.org/jira/browse/CB-9573
delete window.open; // scary, but it just sets back to the default window.open behavior
var windowOpen = window.open; // Yes it is not deleted !
// Note it does not take a target!
var systemOpen = function(url, options) {
// Do not use window.open becaus the InAppBrowser open will not proxy window.open
// in the future versions of the plugin (see doc) so it is safer to call InAppBrowser.open directly
cordova.InAppBrowser.open(url,"_system",options);
};
// Handle direct calls like window.open("url","_blank")
window.open = function(url,target,options) {
if ( target == "_blank" ) systemOpen(url,options);
else windowOpen(url,target,options);
};
// Handle html links like <a href="url" target="_blank">
// See https://issues.Apache.org/jira/browse/CB-6747
$(document).on('click', 'a[target=_blank]', function(event) {
event.preventDefault();
systemOpen($(this).attr('href'));
});
}