【问题标题】:Android webview form submit in evaluateJavascript not working在evaluateJavascript中提交的Android webview表单不起作用
【发布时间】:2020-07-16 01:16:28
【问题描述】:

最近(2020 年 7 月)在 Android WebView 上发生了这种情况。

使用 evaluateJavascript 提交表单不起作用。页面确实“提交”了,但服务器没有收到 POST 值。

Android WebView 是否存在会阻止表单提交的安全更改或其他更新?

任何 JavaScript 表单提交替代方案?

具有单个表单、单个输入和一个提交按钮的简单 HTML 页面。从 URL 加载到 webview。

<form name="form1" method="post" action="stwiosbtn.aspx" id="form1">
<input name="txtField1" type="text" id="txtField1" style="width:90%;" />
<input type="submit" name="btnSave" value="Save" id="btnSave" style="width:90%;" />
</form>

Android Studio 中的 Java 代码

String jScript = "document.forms[0].submit();";
mywebview.evaluateJavascript(jScript, null);

webview中的表单确实提交,调用函数后触发了onPageLoad。但是没有发布值。输入值不会发送任何内容。仅在单击提交按钮时。

有趣的是,这可行,但发送点击按钮不符合我想要满足的要求。

String jScript = "var mysubmitbutton = document.getElementsByName('btnSave'); mysubmitbutton[0].click();";
mywebview.evaluateJavascript(jScript, null);

这是一个成熟的应用程序。表格[0].submit();几周前还在工作。此外,带有 WKWebView 的 iOS 版本具有相同的 JavaScript 并且工作正常。这仅适用于 Android。

还尝试了以下方法,但这些都不起作用;

String jScript = "function doTheThing(){ " +
    "var sendform = document.forms[0]; " +
    "sendform.dispatchEvent(new Event('submit', { cancelable: true })) } " +
    "doTheThing();";

String jScript = "document.getElementById('form1').submit()";

String jScript = "document.getElementById(\"form1\").submit();";

【问题讨论】:

  • 您应该将该 JavaScript 编写在一个单独的文件中并将其加载到一个字符串中,以便您获得适合该语言的工具

标签: javascript android webview


【解决方案1】:

这是一个 .Net 主机问题,毕竟不是 Android。

发布我们的发现以帮助其他开发者。

所使用的页面是一个 .Net 站点。 网站开发人员没有在 page_load 中管理表单响应,而是使用 _onclick 事件作为提交按钮。仅使用 document.forms[0].submit();不会触发按钮的服务器端点击事件,即使该按钮是提交按钮。

注意事项。

这曾经使用相同的 Android 和 .Net 代码。可能是 .Net 框架进行了更改,或者其他库的更改方式使得 submit() 不再触发服务器端 _onclick 的提交按钮。

我们也尝试过 forms[0].requestSumit(); 这也不起作用

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 2018-12-02
    • 2012-09-28
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多