【问题标题】:Android WebView: call activity methods form JavaScript interfaceAndroid WebView:调用活动方法表单JavaScript接口
【发布时间】:2016-10-31 22:05:16
【问题描述】:

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

【问题讨论】:

标签: android webview


【解决方案1】:

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

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

【讨论】:

  • 好的,这样就解决了我的问题。在您给出的示例中它可以工作,因为 DemoJavaScriptInterface 是 WebViewDemo 类的子类并且可以访问它的方法。但是当它不是子类的时候有没有办法实现呢?
  • 它不使用任何WebViewDemo 方法。它只使用mHandler 并且可以传递给构造函数。
  • 我试图通过mHandler,但主要活动仍然无法访问。当我尝试mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); 时,我得到 myWebView cannot be resolved
  • 您还需要将mWebView 传递给 cunstructor,我之前没有看到。
  • 其实我没有。我发现 myWebView 是私有的,这就是我无法访问它的原因:) 不过我认为我会创建一个子类(如示例中所示),因为没有处理程序似乎更容易。感谢您的帮助!
【解决方案2】:

您的活动:

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

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

【讨论】:

  • 在这个 api17+ 的例子中,getPhoneNumber 必须有注解 @android.webkit.JavascriptInterface
【解决方案3】:

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

【讨论】:

  • 是的,我正在使用 addJavascriptInterface(new JavaScriptInterface(this), "Android");问题是:如何从 JavaScriptInterface 类中调用主要活动的方法。
  • 你能用你现在的代码更新你的问题吗?
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2015-07-09
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多