将Javascript变量传递给Android活动?

基本上我想获取我已经从javascript访问的数据并将其传递给Java / Android,以便我可以在那里使用它。

/* An instance of this class will be registered as a JavaScript interface */ class MyJavaScriptInterface { @SuppressWarnings("unused") public void setX(String html){ Activity.this.x = html; Toast.makeText(myApp, Activity.this.x, Toast.LENGTH_LONG).show(); } } 

这有效但我希望能够在任何地方调用相同的Toast行并获得相同的结果。 目前它只在没有通过webview.loadUrl加载调用时返回null / empty(“Javascript:”…

有小费吗?

您无法访问存储的javascript变量,必须通过函数调用来完成。 你必须在你的html页面中通过javascript调用它,例如:

 TheNameOfYourInterface.setX('value'); 

通过将界面添加到webview时,NameOfYourInterface将成为javascript对象

 YourWebView.addJavascriptInterface(new MyJavaScriptInterface(),"TheNameOfYourInterface"); 

因此,您可以在Webview上执行逻辑并在设置数据时调用接口,以便调用Java端的方法。

我找到了一个与我需要的不同的解决方案,我觉得它适用于所有不需要通过javascript获取值的人。 我需要的解决方案是HTTP获取html / javascript,然后将其解析为字符串。 通过不需要加载X WebViews然后(重新)在JavaScript界面​​中创建我的所有function,它节省了一些时间。

我认为将HTML存储在共享首选项中是一个好主意,共享首选项是一种持久存储forms。这样您就可以从任何地方访问它。

  //------get sharedPreferences SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE); //--------modify the value pref.edit().putString("ToastString", html).commit(); //-------get a value from this from anywhere String toastValue=pref.getString("ToastString", "");