Android WebView:从JavaScript界面调用活动方法
是否可以从WebView对象的JavaScript界面调用主活动的方法?或者从这个接口访问SharedPreferences,以便我可以用我的活动读取数据?我想让我的Activity知道发生了特定的JavaScript操作。Android WebView:从JavaScript界面调用活动方法
是的,通过WebView.addJavascriptInterface()
可以在JavaScript和您的应用程序之间进行双向通信。检查这个例子:
http://android-developers.blogspot.com/2008/09/using-webviews.html
好的,这种解决了我的问题。在你给出的例子中它有效,因为DemoJavaScriptInterface是WebViewDemo类的一个子类,可以访问它的方法。但是当它不是子类时,有没有办法实现它? – Krzychu
它不使用任何'WebViewDemo'方法。它只使用'mHandler'并且可以传递给构造函数。 – Caner
我试图通过'mHandler',但主Activity仍然无法访问。当我尝试'mHandler.post(new Runnable(){public void run(){0;}}; mWebView.loadUrl(“javascript:wave()”); } }); '我得到_myWebView无法解析_ – Krzychu
您的活动:
/*
* 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 – MazarD
[将JavaScript接口添加到浏览器]的可能重复(http://stackoverflow.com/questions/3765860/adding-javasc ript-interface-to-a-browser) – skolima