0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

WebView内の'market://'リンクエラーについて

getafe
getafe 0

投稿日:2015-12-02 15:43:14

お世話になっております。
大変困っておりますので、質問させてください。

WebView内でWebサイトを表示させ、その中にあるnendなどのアドネットワークをクリックした時、通常の'http://'などは問題なくリンク先が表示されるのですが、'market://'など直接Google Playを開くリンクは、「ページが見つかりませんでした」エラーとなってしまいます。

'market://'のリンクをクリックした時は、WebViewのbeforeloadイベントも発生していないため、事前に検出することもできません。

Androidのみの現象で、iOSでは問題ありません。

なにか解決策はありますでしょうか?

よろしくお願い致します。

Android
Titanium SDK 5.1.1



回答

hntn
hntn
100

Thumbsup

いい回答

1

Thumbsdown

うーん



こんにちは!

前にも似たような事を書きましたが、Androidモジュール作れる事が前提になるけど、TiUIWebView を extendしたカスタムWebViewなAndroidモジュールを作って、WebView側のWebSettingsで遷移できないように設定すれば、beforeload取れたと思います。

java側こんな感じです。

CustomWebView.java

WebSettings settings = superWebView.getSettings();
settings.setSupportMultipleWindows(false);
settings.setJavaScriptCanOpenWindowsAutomatically(false);

早速のお返事ありがとうございます。 大変参考になりました! モジュールを作成するのが、根本的な解決になりそうですね。 このようなモジュールで、公開されているものはありますでしょうか? モジュールを作成したことがないので、これは時間がかかりそうです。 頑張ります! --- getafe

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

0

Thumbsdown

うーん

そうみたいですね。一番簡単な逃げ道はevalJSです。

$.webview.addEventListener('load', function(e){
  var js = '(function(){var n=document.getElementsByTagName("body")[0];n.innerHTML=n.innerHTML.replace(/market:\\/\\//g, "https://play.google.com/store/apps/");})();';
  $.webview.evalJS(js);
});

要するに、HTML内のmarket://details?id=パッケージ名というリンクをhttps://play.google.com/store/apps/details?id=パッケージ名に変更しているだけです。


早速のお返事、感謝致します。 ロードされたHTMLを見たところ、market://のリンクは入っていませんでした。 また、バナーをクリックした時にもloadイベントは発生しないようです。 HTML内にmarket://が記述されていなければ、この方法では難しいのでしょうか? --- getafe

ログインすると回答することができます。