WebView逆引き

ここではWebに関することを、目的別に紹介していきます。

使用例も。

特記していない限り、webview という WebViewクラスのインスタンスを用いています。

これ、目次とか出来ないの?Jimdoさん。

Webページを表示したい

loadUrl() を利用します。

 

使用例

==============

/* 表示するWebページ */

webview.loadUrl("http://www.google.co.jp/");

URLを取得したい

getUrl() または getOriginalUrl()を使用します。

 

使用例

==============

/* URLを取得する */

String url= webview.getUrl();

* アラートダイアログに取得したURLを表示する */

AlertDialog.Builder ad;

ad.setTitle("Get URL");

ad.setMessage(url);

ad.setPositiveButton("OK",new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,int whichButton)

setResult(RESULT_OK);

}

});

ad.create();

ad.show();

タイトルを取得したい

getTitle() を使用します。

 

使用例

===============

/* タイトルを取得する */

String url= webview.getTitle();

好きなWebページを表示させたい

例えばアプリ側の処理などで、動的に変更したい場合?

loadData(Strng data, String mimeType, String encoding) を使用します。

各引数の意味は、以下の表になっています。

引数名 入出力 意味
data 入力 String 表示させたいデータ
mimeType 入力 String mimeTypeの設定
encoding 入力 String エンコードの設定

使用例

==============

/* 設定 */

webview.loadData("hogehoge", "text/html", "utf-8");

JavaScriptのイベントをハックしたい!

JS側のalertなどのいくつかのイベントは、Android側で取得することができます。

下の例では、HTML側にダイアログは出ずに、AndroidのViewに3秒間ダイアログが表示されます。

 

使用例

==============

/* alertイベントのハック */

webview.setWebChromeClient(new WebChromeClient() {

    public boolean onJsAlert(final WebView view,

    final String url, final String message,

    JsResult result) {

        Toast.makeText(WebForJsActivity.this, message, 3000).show();

        result.confirm();

        return true;

     }

 });

ページの読み込み開始/完了コールバックを取得したい

ページが読み込み開始・完了した時のコールバックを取得できます。

例では、WebViewClientを別なクラスでOverrideしています。

さらに、タイトルバー部分に読み込み中を表すプログレクバーを表示させています。

 

使用例

==============

webview.setWebViewClient(new TkFoxClient());

 

public class TkFoxClient extends WebViewClient {

    @Override

    public void onPageFinished(WebView view, String url) {

        setProgressBarIndeterminateVisibility(false);

        Log.d("PageRead", "Finish:" + url);

    }

    @Override

    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        setProgressBarIndeterminateVisibility(true);

        Log.d("PageRead", "Start:" + url);

    } 

}

Bookmarkに登録したい

任意のURL、タイトルのページをBookmarkに加えます。

これはWebViewではなく、Browserクラスを用います。

専用のダイアログが出るため楽です。

例では、表示中のページを加えてみましょう。

 

使用例

==============

Browser.saveBookmark(this, webview.getTitle(), webview.getUrl());

Bookmarkを取得したい

登録されているBookmarkを取得します。

これは実は、WebViewは用いません。Browserクラスを用います。

普通に取得するとURLしか取得できません。

ここではクエリを工夫して、タイトルも取得し、適当なTextViewに表示させています。

Bookmarkを参照/書き込みするときは、Permissionの設定が必要です。

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"></uses-permission>

<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"></uses-permission>

 

参考:http://blog.goo.ne.jp/karutaya/e/634d4ae63a858d38b9af48c8ee69a92c

 

使用例

==============

/* 現在のActivityのContentResolverを得る */

ContentResolver p = this.getContentResolver();

/* URL、タイトルのリストを得る */

Cursor cursor = p.query(Browser.BOOKMARKS_URI,

new String[] {

Browser.BookmarkColumns.URL,

Browser.BookmarkColumns.TITLE

},

"bookmark= 1", null, null);

 

/* URLの位置 */

final int urlIndex = cursor.getColumnIndex(Browser.BookmarkColumns.URL);

/* タイトルの位置 */

final int titleIndex = cursor.getColumnIndex(Browser.BookmarkColumns.TITLE);

 

/* 文字列の用意 */

StringBuffer bookmark = new StringBuffer();

/* リストの一番目に移動 */

cursor.moveToFirst();

/* リストを最後まで捜索 */

do {

    /* URLを得る */

    String url = cursor.getString(urlIndex);

    /* タイトルを得る */

    String title = cursor.getString(titleIndex);

    /* 文字列に格納 */

    bookmark.append("URL:"+url+System.getProperty("line.separator"));

    bookmark.append("Title:"+title+System.getProperty("line.separator"));

} while (cursor.moveToNext());

 

textview.setText(bookmark.toString());