Nativescript 在WebView中填充HTML表单
我有一个NativeScript-5应用程序(TypeScript风格),其简单页面如下:Nativescript 在WebView中填充HTML表单,nativescript,Nativescript,我有一个NativeScript-5应用程序(TypeScript风格),其简单页面如下: <Page class="page"> <StackLayout> <WebView id="webView" loaded="onWebViewLoaded" src="http://google.com" /> </StackLayout> </Page> 加载网页(onWebViewLoded())后,我希望我
<Page class="page">
<StackLayout>
<WebView id="webView" loaded="onWebViewLoaded" src="http://google.com" />
</StackLayout>
</Page>
加载网页(onWebViewLoded())后,我希望我的应用程序填充某些HTML字段(通过id或名称访问),最后发布周围的HTML表单。这能做到吗
我知道有一个插件,但它需要我在加载的页面中嵌入一个脚本(我不能这样做,因为我不拥有我正在加载的页面)。所以我想我需要另一种方法
如果有人有一个解决方案,至少可以在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}`);
}
}
}
导出函数onLoadFinished(args:EventData){
const webView=(args.object).nativeView;
if(isAndroid){
//确保元素索引有效
常量javaScript=`document.getElementsByTagName(“输入”)[2].value=“它工作!”`;
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.KITKAT){
evaluateJavascript(javaScript,null);
}否则{
loadUrl(`javascript:${javascript}`);
}
}
}
这是你的电话号码
iOS也可以,但是在创建本机视图时,您可能必须重写/扩展现有的{N}WebView注入JavaScript 听起来你应该调用API,而不是仅仅为了填写表单和自动发布而加载网页。您确定要按照您描述的方式执行吗?很遗憾,没有API。所以是的,我需要加载一个特定的网页(不是谷歌-这只是一个例子),然后填充2-3个字段并提交。不过,你可以自己构建一个帖子,而不必加载页面。它可能不是一个文档化很好的API,但如果他们有一个表单可以发布值,它(几乎可以肯定)就在那里。@Ian,谢谢。你能想到一个完全不同的方法真是太好了。但在这种情况下,我需要在各种不同的场景中使用“我的方式”。所以我真的需要一种方法来加载和显示一个带有自动填充值的网页。在大多数情况下,我的用户会通过点击HTML按钮自己提交web表单。所以,在这种情况下,它不是关于调用API。太好了,Manoj。谈到NativeScript,您是最好的助手!老实说,我昨晚晚些时候也想出了同样的解决办法——但我太累了,没法发布。我想现在就做。所以,非常感谢你!我看你也在做自由职业者的工作。我可能偶尔会吃点东西。我怎样才能和你联系?如果你有兴趣,你可以通过stackoverflow@softwarea.de.