2011-12-28 25 views
8

Tôi muốn biết nếu có bất kỳ cách nào mà tôi có thể gọi một hàm JavaScript từ Hoạt động Android gốc.Cách gọi hàm javascript trực tiếp từ một hoạt động trong Android?

Tôi đã xem qua:

webView.loadUrl("javascript:hello()"); 

Nhưng nó không làm việc cho tôi.

Ngoài ra, làm thế nào Android biết được trang html nào có chức năng JavaScript này?

+0

plz cũng bỏ phiếu lên đến tôi answer ... :) – Talha

Trả lời

13

Android chỉ có thể gọi phương thức javascript nếu một trang html hiện đang nạp trong WebView

webView.loadUrl("javascript:hello()"); 

sẽ gọi chào phương pháp bằng văn bản trong trang html chỉ khi trang chứa phương pháp này hiện đang được nạp trong việc kiểm soát webview

cuộc gọi đầu tiên

webview.loadUrl("Your html page url"); 

sau đó gọi

webView.loadUrl("javascript:hello()"); 
+2

tôi đã kích hoạt mọi thứ như đã nói trong câu trả lời 1 và 2.Nhưng không có gì hiệu quả. – Smitha

+0

hãy kiểm tra trang html của bạn trên trình duyệt và kiểm tra xem có lỗi nào trên trang html của bạn javascript không ... – Talha

+0

Giải pháp đang hoạt động mà không gặp vấn đề gì với các đối số trong phương thức javascript. Đẹp nhất. – Krystian

3

Trước khi sử dụng JavaScript, trước tiên bạn phải kiểm tra Javascript được bật hay không trong ứng dụng của bạn bằng cách sử dụng "getJavaScriptEnabled()" (FALSE mặc định của nó). Và phương thức loadUrl() chỉ được sử dụng để tải trang hiện tại. Nó không làm bất cứ điều gì liên quan đến JavaScript.

VÍ DỤ:

Thiết lập WebView

// khởi tạo của webview

webView = (WebView) findViewById(R.id.webView); 
WebSettings webSettings = webView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 

tải HTML trong WebView

webView.loadUrl("file:///android_asset/testhtml.html"); 

Setting WebChromeClient để WebView

webView.setWebChromeClient(new MyJavaScriptChromeClient()); 

Lớp MyJavaScriptChromeClient Ở đây chúng ta phải ghi đè phương thức onJsAlert() để xử lý JavaScript Alert Function.

private class MyJavaScriptChromeClient extends WebChromeClient { 
    @Override 
    public boolean onJsAlert(WebView view, String url, String message,final JsResult result) { 
//handle Alert event, here we are showing AlertDialog 
    new AlertDialog.Builder(MainWebViewActivity.this) 
     .setTitle("JavaScript Alert !") 
     .setMessage(message) 
     .setPositiveButton(android.R.string.ok, 
      new AlertDialog.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // do your stuff 
        result.confirm(); 
       } 
      }).setCancelable(false).create().show(); 
    return true; 
    } 
} 

Html tập tin của tôi: testhtml.html:

<html> 

    <body > 

    <div onclick="alert('hello')"> Click Me !! </div> 

    </body> 

</html> 

Phương thức hoạt động? Khi văn bản "Nhấp vào tôi !!" trên WebView được nhấp vào, chức năng android onJsAlert (xem WebView, Chuỗi url, chuỗi tin nhắn, kết quả JsResult cuối cùng) được gọi. Tham số cảnh báo được sao chép vào tham số thông điệp của hàm onJsAlert. Và phần còn lại của việc xử lý được thực hiện ở đó. Ở đây chúng tôi đang hiển thị một AlertDialog.

10

Trong trường hợp bất cứ ai có bất kỳ vấn đề với điều này như tôi đã làm, bạn cần phải gọi hàm javascript của bạn sau khi trang đã tải xong nếu không javascript sẽ không được gọi là:

webviewer.loadUrl("file:///android_asset/mypage.html"); 
    webviewer.setWebViewClient(new WebViewClient() { 

     public void onPageFinished(WebView view, String url) 
     { 
      webviewer.loadUrl("javascript:hello()"); 
     } 
    }); 
Các vấn đề liên quan