12/08/2018, 14:11
[Android] Sử dụng JavascriptInterface trong webview
Sử dụng JavascriptInterface trong webview I. Giới thiệu. WebView là một giao diện để tải và hiển thị nội dung web cũng như cung cấp các tính năng của một trình duyệt cơ bản. Webview còn cung cấp môi trường để có thể thưc thi JavaScript. Thông qua javascript chúng ta có thể điều khiển ...
Sử dụng JavascriptInterface trong webview
I. Giới thiệu.
- WebView là một giao diện để tải và hiển thị nội dung web cũng như cung cấp các tính năng của một trình duyệt cơ bản.
- Webview còn cung cấp môi trường để có thể thưc thi JavaScript.
- Thông qua javascript chúng ta có thể điều khiển tương tác nội dung website với ứng dụng.
- Tùy ý điều chỉnh hiện thị nội dung website trên ứng dụng.
II. Sử dụng JavascriptInterface.
- Tạo 1 đối tượng JavascriptInterface
class MyJavaScriptInterface { _@JavascriptInterface public void scrollWidth(String jsResult) { } }
- scrollWidth(): hàm này sẽ được thực thi trong câu lệnh javascript - @JavascriptInterface: quyền truy cập javascript yêu cầu API Level 17
- Cài đặt một đối tượng Java vào webview để có thể truy cập từ JavaScript.
webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
- HTMLOUT : định danh đối tượng để sử dụng trong câu lệnh javascript
- Liên kết với đối tượng javascript vừa tạo với webview
mWebview.loadUrl("javascript:( function () { var result = document.documentElement.scrollWidth; window.HTMLOUT.scrollWidth(result); } ) ()");
- Thêm key “javascript:” trước nội dung câu lệnh để webview hiểu đó là 1 hàm javascript. - window.HTMLOUT.scrollWidth(result): thực hiện gọi hàm scrollWidth() trong đối tượng MyJavaScriptInterface để lấy giá trị trong biến result, thông qua định danh HTMLOUT.
- Loại bỏ hoạt động javascript
RemoveJavascriptInterface(“HTMLOUT”);
- Code demo:
public class TestWebview extends Activity { WebView webView; _@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_webview); initWebview(); } private void initWebview() { webView = (WebView) findViewById(R.id.webview_test); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); webView.setWebViewClient(new WebViewClient() { _@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } _@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } _@Override public void onPageFinished(WebView view, String url) { setJavascript(); } }); webView.loadUrl("http://framgia.com/jp/contact.html"); } class MyJavaScriptInterface { _@JavascriptInterface public void scrollWidth(String jsResult) { Log.d("DAT", "Width webview = " + jsResult); } } private void setJavascript() { webView.loadUrl( "javascript:( " + "function () {" + " var result = document.documentElement.scrollWidth; window.HTMLOUT.scrollWidth(result); " + "} ) ()" ); } }
III. Tổng Kết
- JavascriptInterface trong webview là một kỹ thuật nâng cao, nó có thể giải quyết các vấn đề thực hiện tương tác đến các website.
- JavascriptInterface thích hợp xử lý hiển thị những văn bản có style phực tạp cần sử dụng HTML, hay đọc các file epub.
- Ứng dụng của JavascriptInterface webview vào thực tiễn không nhiều vì hầu hết các ứng dụng đều chia ra 2 mảng phần biệt web và mobile. Nhưng nếu cần sự kết hợp giữa 2 mảng này thì JavascriptInterface hoàn toàn đủ khả năng thực hiện điều đó.