0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

WebView にて target="_blank" を新しいウィンドウで展開させない方法

sekisen
sekisen 0

投稿日:2015-03-20 01:23:00

Titanium にて Androidアプリを開発しています。

WebView を使用してサイトを表示しているのですが、aタグに target="_blank" が記述されている場合、新しいウィンドウが起動してリンク先が展開されてしまいます。

新しいウィンドウではなく、元のウィンドウ(WebView)にてリンク先を展開する方法はないでしょうか。

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


ご回答ありがとうございます! お蔭様で問題を解消することができました! --- sekisen


回答

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

1

Thumbsdown

うーん



Voodoo的解決ですが。

var blankToSelf = '\
(function(){ \
  var links = document.getElementsByTagName("a"); \
  for(var i = 0, len = links.length; i < len; i++){ \
    var link = links[i]; \
    var attrs = link.attributes; \
    for(var j = 0, length = attrs.length; j < length; j++){ \
      var attr = attrs[j]; \
      var name = attr.name; \
      var value = attr.value.toLowerCase().trim(); \
      if(name == "target" && value == "_blank"){ \
        link.attributes[j].value = "_self"; \
      } \
    } \
  } \
})(); ';
$.webview.addEventListener('load', function(e){
  $.webview.evalJS(blankToSelf);
});

ご回答ありがとうございます! お蔭様で大半のページでは問題を解消することができたのですが、情報量の多いページでは読み込みが完了する前にリンクがクリックされてしまうケースがあり、その際にはやはり新しいウィンドウが起動してしまいました。 --- sekisen

ですね。loadイベントが発生するまでviewをかぶせるみたいな涙ぐましい解決が必要ですね。 --- yagi_

hntn
hntn
100

Thumbsup

いい回答

0

Thumbsdown

うーん

こんにちは!

モジュールが作れるなら、TiUIWebView を extends して
android.webkit.WebSettings.setJavaScriptCanOpenWindowsAutomatically(false);
したWebViewのモジュールを作れば、望み通りになります。


ご回答ありがとうございます! お蔭様で問題を解消することができました! --- sekisen

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