2012-05-06 39 views
24

Tôi đang cố bắt đầu một hoạt động từ giao diện javascript trong chế độ xem web của mình. Ví dụ cho thấy bánh mì nướng. Làm thế nào tôi có thể gọi một lớp thay vì một bánh mì nướng?sử dụng javascript trong webview android

public class JavaScriptInterface { 
Context mContext; 

/** Instantiate the interface and set the context */ 
JavaScriptInterface(Context c) { 
    mContext = c; 
} 

/** Show a toast from the web page */ 
public void showToast(String toast) { 
    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
} 
} 

trang này cho trang html.

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> 

<script type="text/javascript"> 
function showAndroidToast(toast) { 
    Android.showToast(toast); 
} 

+3

Tôi không đủ kinh nghiệm để trả lời nhưng bạn đã đọc điều này chưa: http://developer.android.com/guide/webapps/webview.html#UsingJavaScript – JaredMcAteer

+0

tôi đã làm điều đó. – Common

+0

Ok Tôi chỉ không thấy bất kỳ nơi nào bạn đã bật javascript trong chế độ xem web và mặc dù nó có liên quan. – JaredMcAteer

Trả lời

60

Bạn cần phải đầu tiên đăng ký JavaScriptInterface trên webview của bạn. JavaScriptInterFace có thể là một lớp bên trong như hình dưới đây. Lớp này sẽ có một hàm mà bạn có thể gọi từ trang html (thông qua javaScript) và bên trong hàm này bạn có thể viết mã để thay đổi hoạt động.

Dưới đây là giải pháp làm việc cho bạn:

public class JavascriptInterfaceActivity extends Activity { 
    /** Called when the activity is first created. */ 


    WebView wv; 

    JavaScriptInterface JSInterface; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     wv = (WebView)findViewById(R.id.webView1); 

     wv.getSettings().setJavaScriptEnabled(true); 
     // register class containing methods to be exposed to JavaScript 

     JSInterface = new JavaScriptInterface(this); 
     wv.addJavascriptInterface(JSInterface, "JSInterface"); 

     wv.loadUrl("file:///android_asset/myPage.html"); 

    } 


    public class JavaScriptInterface { 
     Context mContext; 

     /** Instantiate the interface and set the context */ 
     JavaScriptInterface(Context c) { 
      mContext = c; 
     } 

     @android.webkit.JavascriptInterface 
     public void changeActivity() 
     { 
      Intent i = new Intent(JavascriptInterfaceActivity.this, nextActivity.class); 
      startActivity(i); 
      finish(); 
     } 
    } 
} 

Đây là trang html

<html> 
<head> 
<script type="text/javascript"> 
function displaymessage() 
{ 
JSInterface.changeActivity(); 
} 
</script> 
</head> 

<body> 
<form> 
<input type="button" value="Click me!" onclick="displaymessage()" /> 
</form> 
</body> 
</html> 

Hope this helps ...

+0

Cảm ơn bạn của tôi. nó gần như đã giúp tôi giải quyết vấn đề của mình. – Common

+0

@Common tôi nên lấy mã html ở trên trong tệp html riêng biệt? –

+4

Điều này rất hữu ích khi gọi các chức năng của Android từ javascript, nhưng có cách nào để gọi hàm javascript từ mã Android? –

18

Bạn cũng cần phải thêm @android .webkit.JavascriptInterface chú thích ở trên phương thức changeActivity trong mã Android của bạn, nếu bạn chạy trên Android 4.2 trở lên. Xem này link để biết thêm.

+0

Thông tin bổ sung này cho câu trả lời ở trên rất hữu ích! – David

+0

bạn sir là thiên tài – ashutosh

+0

Nó thực sự đã giúp tôi – vm345

Các vấn đề liên quan