使用 Electron webview 发送 post 请求

Send a post request with an Electron webview

我想从外部脚本发送一个带有 Electron webviewPOST 请求。目前我只是设置 src 属性来触发页面加载,它发送 GET 请求:

<webview id="view">
<script>
document.getElementById('view').setAttribute('src', 'http://example.com/?foo=bar');
</script>

有没有办法通过发送 POST 请求将 webview 导航到 URL?也许 webview 的一种方法,而不是仅仅使用 src?

进行黑客攻击

您可以使用 .executeJavaScript 在 webview 上下文中执行任意代码。

此外,您的代码可以访问所有浏览器内置的 api。最简单的方法是使用 fetch,方法设置为 post.

在你的情况下(假设 webview 已经加载;例如它的 .src 已经设置):

document.getElementById('view')
  .executeJavaScript('fetch("http://example.com/?foo=bar", {method: "post"});');

一些备注:

  1. 请求的来源由 webview 的 .src 控制。
  2. Webview 似乎仍在使用所有默认安全策略 - 特别是您不能从 https:.
  3. 调用 http:
  4. 将代码作为字符串传递有点痛苦。

基本上,Webview 元素没有像 "method" 那样的 属性 表单,因此您无法为其请求指定特定的 HTTP 方法。我建议您使用 AngularJS 或任何其他 JS 框架来归档您的目的。

我找到了两个解决方法,因为 <webview> 目前似乎无法发送 POST 请求。

  1. 也许您正在使用的站点允许您通过将任何表单元素添加到 URL 的查询字符串来将表单作为 GET 发送。事实证明,我使用的网站确实允许这样做,如果我没有真正尝试过,我是不会猜到的。
  2. 您可以通过 AJAX/fetch 等手动发送 POST,然后将 webview 中页面的 HTML 替换为您的手册返回的 HTML POST。您可以使用 .executeJavaScript() and/or Electron 的 IPC 来实现。

这两种解决方法都不适用于所有情况。也可能值得向 Electron 团队提交功能请求...

所以我直接提交了功能请求。你可以在这里关注它:https://discuss.atom.io/t/add-http-post-method-to-webview/29702

现在文档中有一个带有 postData 选项的新 <webview>.loadURL() 方法。我还没有使用过它,但它看起来和我过去寻找的一模一样。

他们似乎同时将其添加为一项功能。