AndroidWebView:调用活动方法形成JavaScript界面

AndroidWebView:调用活动方法形成JavaScript界面,android,webview,Android,Webview,是否可以从WebView对象的JavaScript接口调用主活动的方法?或者从此界面访问SharedReferences,以便我可以通过活动读取数据?我想让我的活动知道发生了特定的JavaScript操作。是的,JavaScript和应用程序之间可以通过WebView.addJavascriptInterface()进行双向通信。检查此示例: 您可以使用WebView.addJavascriptInterface函数来实现这一点。更多信息:您的活动: /* * entry point of t

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

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


您可以使用
WebView.addJavascriptInterface
函数来实现这一点。更多信息:

您的活动:

/*
 * 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>

警报(android.getPhoneNumber());

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

是的,我正在使用addJavascriptInterface(新JavaScriptInterface,即“Android”);问题是:如何从JavaScriptInterface类中调用main activity的方法。你能用你现在的代码更新你的问题吗?好的,这样就解决了我的问题。在您给出的示例中,它是有效的,因为DemoJavaScriptInterface是WebViewDemo类的一个子类,可以访问其方法。但是,当它不是一个子类时,有没有办法实现它呢?它不使用任何
WebViewDemo
方法。它只使用
mHandler
,可以传递给构造函数。我试图传递
mHandler
,但主活动仍然无法访问。当我尝试
mHandler.post(new Runnable(){public void run(){mWebView.loadUrl(“javascript:wave()”;}})我获取的myWebView无法解析您还需要将
mWebView
传递给cunstructor,我以前没有看到过。实际上我没有。我发现myWebView是私有的,这就是我无法访问它的原因:)尽管如此,我认为我将创建一个子类(如示例中所示),因为没有处理程序似乎更容易。谢谢你的帮助!本例中api17+的可能重复项getPhoneNumber必须具有注释@android.webkit.JavascriptInterface