在联通应用程序开发中,存在一种情况,用户希望他们的交互式网页内容作为原生 Android 或 iOS 应用程序。 因此,开发人员有 2 个选择,他们可以从头开始构建应用程序,这需要额外的时间和资源,或者最简单、更快的选择是将网页作为 Web 视图嵌入到本机 Android 应用程序中。 它将减轻开发人员开发本机应用程序 UI 和仅使用当前网页中的 UI 的负担。
但是,这些方法都有局限性url编码 javascript,例如单个任务或手势只能发生在联通应用程序中,而不能发生在浏览器中,例如语音命令或滑动手势。 为了适应这种情况,我们需要在本机应用程序中添加额外的代码,并将本机任务连接到我们的 webview 应用程序。在这些情况下,javascript 注入作为将本机代码(Java 或 Swift)与网页代码(Javascript)桥接的解决方案
Android 中的 Javascript 注入
在这里我将尝试解释在 Nativeandroid 应用程序中加载网页需要完成的基本设置。首先,您需要在 Activity 布局中设置 WebView,以下是如何在 AndroidXML 文件中添加标记的示例
稍后,我们的应用程序需要访问互联网来工作,因此我们应该在Android清单文件中添加以下句型
...
现在,我们可以连接到MainActivity.java文件,我们需要在onCreate()函数中添加以下句型。 由于 onCreate 函数是我们初始化所有内容的第一个地方url编码 javascript,因此以下语法可以帮助我们初始化 webview。 需要将 setJavaScriptEnabled(true) 句型设置为 true,以授予此处使用 javascript 注入的权限。 addJavascriptInterface(this,"android") 语法将有助于创建可用作 Java 和 Javascript 之间桥梁的 Web 界面。 在这里,我们的界面将被称为 android。 最后一个模式是 loadUrl,它有助于在本机应用程序中加载我们的网页。
WebView webViewMain;
webViewMain = findViewById(R.id.webview);
webViewMain.getSettings().setJavaScriptEnabled(true);
webViewMain.addJavascriptInterface(this, "android");
webViewMain.loadUrl("https://www.example.com");
在 MainActivity.java 文件中,我们始终需要在 onCreate() 函数之外添加一个类。 这个类将存储我们想要在 javascript 中运行的所有函数,我们也可以从 javascript 获取任何值以传输到 java 本机应用程序变量。 一个例子是 getId 函数,它将 id 从 HTML 标签传输到本机应用程序以进行识别。
public class WebAppInterface {
String value = "hello"
@JavascriptInterface
public String runValue() {
return value;
}
@JavascriptInterface
public int getId(id) {
return id;
}
}
要使用上述函数,我们可以在 onCreate() 或其他侦听器函数中添加以下语法。 大家可以认识到我们使用loadUrl来注入javascript,在loadurl中我们可以使用各种javascript句型来导入网页。 同样在loadurl中,我们需要添加里面已经创建的函数,并使用android作为父函数。
webViewMain.loadUrl("javascript:window.onclick = function(e) {n" +
"android.getId(e.target.id);}");
webViewMain.loadUrl("javascript:android.getSpeechIndex()");