nativescript - 在 WebView 中填充 HTML 表单
问题描述
我有一个带有如下简单页面的 NativeScript-5 应用程序(TypeScript 风格):
<Page class="page">
<StackLayout>
<WebView id="webView" loaded="onWebViewLoaded" src="http://google.com" />
</StackLayout>
</Page>
加载网页 (onWebViewLoded()) 后,我希望我的应用程序填充某些 HTML 字段(通过 id 或名称访问)并最终发布周围的 HTML 表单。这完全可以做到吗?
我知道有一个Nativescript-WebView-Interface插件,但它需要我在加载的页面中嵌入一个脚本(我不能这样做,因为我不拥有我正在加载的页面)。所以我认为我需要另一种方法。
如果有人有至少适用于 Android 的解决方案,那就太好了。多谢你们!
更新:为了避免误解:提交页面是可选的。重要的部分是加载网页并自动填充我的应用程序已经知道的一些值(因此用户不必自己在 HTML 表单中输入这些值)。
解决方案
您可以轻松地在 Android 的网页上下文中执行 JavaScript。
export function onLoadFinished(args: EventData) {
const webView = (<WebView>args.object).nativeView;
if (isAndroid) {
// Make sure the element index is valid
const javaScript = `document.getElementsByTagName("input")[2].value = "It works!"`;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(javaScript, null);
} else {
webView.loadUrl(`javascript:${javaScript}`);
}
}
}
这是游乐场样本
iOS 也可以,但您可能必须在创建本机视图时覆盖/扩展现有的 {N} WebView 注入 JavaScript。
推荐阅读
- google-chrome - Firefox 中的错误处理清单
- python - (Python)列表元素的数量
- android - 清理构建时如何防止删除构建目录?
- mysql - 如果每列都等于同一事物,则 MySQL 获取行
- google-chrome - Chrome 开发工具中的新调试图标“步骤 F9”
- crystal-reports - 如何比较水晶报表中的英尺/英寸值?
- html - 向下滚动时HTML / CSS中的静态菜单?
- scala - 在使用 getFromFile 提供文件时添加或更改要使用的媒体类型
- cucumber - 如何在黄瓜扩展报告中嵌入场景名称或功能名称作为报告文件名?
- scala - 如何使用Scala / spark数据框从第1行到第N行之间的一列计算值