Android WebView:从JavaScript界面​​调用活动方法

问题描述:

是否可以从WebView对象的JavaScript界面​​调用主活动的方法?或者从这个接口访问SharedPreferences,以便我可以用我的活动读取数据?我想让我的Activity知道发生了特定的JavaScript操作。Android WebView:从JavaScript界面​​调用活动方法

+0

[将JavaScript接口添加到浏览器]的可能重复(http://stackoverflow.com/questions/3765860/adding-javasc ript-interface-to-a-browser) – skolima

是的,通过WebView.addJavascriptInterface()可以在JavaScript和您的应用程序之间进行双向通信。检查这个例子:

http://android-developers.blogspot.com/2008/09/using-webviews.html

+0

好的,这种解决了我的问题。在你给出的例子中它有效,因为DemoJavaScriptInterface是WebViewDemo类的一个子类,可以访问它的方法。但是当它不是子类时,有没有办法实现它? – Krzychu

+0

它不使用任何'WebViewDemo'方法。它只使用'mHandler'并且可以传递给构造函数。 – Caner

+0

我试图通过'mHandler',但主Activity仍然无法访问。当我尝试'mHandler.post(new Runnable(){public void run(){0;}}; mWebView.loadUrl(“javascript:wave()”); } }); '我得到_myWebView无法解析_ – Krzychu

可以使用WebView.addJavascriptInterface功能来实现这一目标。更多信息:In Google documentation

+0

是的,我使用addJavascriptInterface(new JavaScriptInterface(this),“Android”);问题是:如何从JavaScriptInterface类中调用主要活动的方法。 – Krzychu

+0

你可以用你现在的代码更新你的问题吗? – SERPRO

您的活动:

/* 
* entry point of the application starting the index.html of PhoneGap 
* */ 

package com.test.my.myApp; 

import org.apache.cordova.DroidGap; 

import android.os.Bundle; 
import android.util.Log; 

import com.google.analytics.tracking.android.EasyTracker; 

public class MyOpelMainActivitiy extends DroidGap 
{ 

    String curPhoneNumber; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.setIntegerProperty("splashscreen", R.drawable.splash); 
     super.loadUrl("file:///android_asset/www/app/index.html",15000); 

    } 
    @Override 
    public void onStart() { 
     super.onStart(); 
     this.appView.addJavascriptInterface(new JsInterface(), "android"); 
     curPhoneNumber = "test"; 

     // The rest of your onStart() code. 
     EasyTracker.getInstance().activityStart(this); // Add this method. 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy();  
     com.google.analytics.tracking.android.EasyTracker.getInstance().activityStop(this); 
    } 

    public class JsInterface{ 





      public String getPhoneNumber() 
      { 

       // Here call any of the public activity methods.... 
       return curPhoneNumber; 
      } 
     } 
    } 

HTML标记:

<script type="text/javascript"> 
      alert(android.getPhoneNumber()); 
     </script> 

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

+0

在此示例中,对于api17 +,getPhoneNumber必须具有注释@ android.webkit.JavascriptInterface – MazarD