bin*_*unt 8 javascript events android onresume android-webview
我的 Android 应用程序中有一个 WebView,并且我需要在任何时候运行 JavaScript 函数
在我的网页 javascript 中使用visibilitychange事件侦听器仅适用于情况 1。
理想情况下,我想使用 Android java 函数触发某种 javascript 事件onResume(),但是如何触发呢?
您可以使用 WebViewevaluateJavascript()方法来执行此操作。
首先,您需要在网页 JavaScript 中创建一个事件,并添加事件处理程序:
\n\nwindow.appResumeEvent = new Event(\'appresume\');\n\nwindow.addEventListener(\'appresume\', yourFunction, false);\n\nfunction yourFunction() {\xe2\x80\xa6}\nRun Code Online (Sandbox Code Playgroud)\n\n在全局范围内设置创建应用程序恢复事件非常重要(可以通过将其设置为 的属性来实现window)。
现在,在您的 AndroidonResume()方法中,运行该evaluateJavascript()方法:
@Override\nprotected void onResume() {\n super.onResume();\n mainWebView.evaluateJavascript("(function() { window.dispatchEvent(appResumeEvent); })();", new ValueCallback<String>() {\n @Override\n public void onReceiveValue(String value) {\n\n }\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,JavaScript 必须包装在立即调用的函数表达式中。另请注意,dispatchEvent()将事件变量作为参数,而不是事件名称字符串。
详细信息:在 javascript 中创建和分派事件(MDN)
\n\n对于我的完整MainActivity.java点击显示片段:
import android.webkit.WebSettings;\r\nimport android.webkit.WebView;\r\nimport android.webkit.WebViewClient;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n private WebView mainWebView;\r\n\r\n @Override\r\n protected void onCreate(Bundle savedInstanceState) {\r\n super.onCreate(savedInstanceState);\r\n setContentView(R.layout.activity_main);\r\n\r\n mainWebView = findViewById(R.id.activity_main_webview);\r\n mainWebView.setWebViewClient(new WebViewClient());\r\n WebSettings webSettings = mainWebView.getSettings();\r\n webSettings.setJavaScriptEnabled(true);\r\n\r\n mainWebView.loadUrl("file:///android_asset/www/index.html");\r\n }\r\n\r\n @Override\r\n protected void onResume() {\r\n super.onResume();\r\n mainWebView.evaluateJavascript("(function() { window.dispatchEvent(appResumeEvent); })();", new ValueCallback<String>() {\r\n @Override\r\n public void onReceiveValue(String value) {\r\n\r\n }\r\n });\r\n }\r\n}Run Code Online (Sandbox Code Playgroud)\r\n