2011年12月10日土曜日

WebView のリンクをクリックしたら、別なWebView を開く

WebView上のリンクをクリックすると、
そのWebView上でリンクを開いてしまうようなので、これを何とかしたい。

手順としては、
WebView上のリンクをクリックしたら、
Titanium へリンクがクリックされたというイヴェントと共に、
リンク先URLを送る。
更に、リンククリックを無効化する。

次に、
Titanium側でリンクがクリックされたイヴェントを発火させる。
受け取ったリンクを元に、新しいWindowとWebViewを開く。

まぁ、書いてみると、たいしたことではない。
忘れる前に参考URL
jQueryでリンクを無効にするやり方はコチラ。
http://black-flag.net/jquery/20110526-3128.html

TitaniumのWebViewからリンククリックイヴェントを取得するやり方はコチラ。
http://www.mountposition.co.jp/blog/?p=81

実際に書いてみるとこんな感じ。
【html側】
$(document).ready(function(){
    $("a").live("click",function(e){
        var link     = $(this).attr("href");
        Ti.App.fireEvent("linkClick", {link:link});
        return false;// or e.preventDefault();
    });
});

で、Titanium側は

【Titanium側】
Ti.App.addEventListener("linkClick",function(e){
        var win      = Ti.UI.createWindow();
        var linkView = Ti.UI.createWebView({url:e.link});
        win.add(linkView);
        win.open({animated:true,fullscreen:true});
});

return false;// or e.preventDefault();
で、A要素をクリックしたときのイヴェントを打ち消してる
(現在ののWebView上でURLを開かないようにしている)感じ。
まぁ、あとは参考URLのとおりです。
$("a").live() にしているのは、
動的に要素を追加した時とかに困るから。
jQuery1.7 系からは on/off とかだっけ?忘れた。それとは別か?

まぁ、こんな感じですね~。
あんまり、 $(document).ready(function(){}); の中にコード書きたくないんだけど、まぁ、いいかな。たまには。

0 件のコメント:

コメントを投稿