使用 Electron webview 发送 post 请求
Send a post request with an Electron webview
我想从外部脚本发送一个带有 Electron webview 的 POST
请求。目前我只是设置 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"});');
一些备注:
- 请求的来源由 webview 的
.src
控制。
- Webview 似乎仍在使用所有默认安全策略 - 特别是您不能从
https:
. 调用 http:
- 将代码作为字符串传递有点痛苦。
基本上,Webview 元素没有像 "method" 那样的 属性 表单,因此您无法为其请求指定特定的 HTTP 方法。我建议您使用 AngularJS 或任何其他 JS 框架来归档您的目的。
我找到了两个解决方法,因为 <webview>
目前似乎无法发送 POST
请求。
- 也许您正在使用的站点允许您通过将任何表单元素添加到 URL 的查询字符串来将表单作为
GET
发送。事实证明,我使用的网站确实允许这样做,如果我没有真正尝试过,我是不会猜到的。
- 您可以通过 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()
方法。我还没有使用过它,但它看起来和我过去寻找的一模一样。
他们似乎同时将其添加为一项功能。
我想从外部脚本发送一个带有 Electron webview 的 POST
请求。目前我只是设置 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"});');
一些备注:
- 请求的来源由 webview 的
.src
控制。 - Webview 似乎仍在使用所有默认安全策略 - 特别是您不能从
https:
. 调用 - 将代码作为字符串传递有点痛苦。
http:
基本上,Webview 元素没有像 "method" 那样的 属性 表单,因此您无法为其请求指定特定的 HTTP 方法。我建议您使用 AngularJS 或任何其他 JS 框架来归档您的目的。
我找到了两个解决方法,因为 <webview>
目前似乎无法发送 POST
请求。
- 也许您正在使用的站点允许您通过将任何表单元素添加到 URL 的查询字符串来将表单作为
GET
发送。事实证明,我使用的网站确实允许这样做,如果我没有真正尝试过,我是不会猜到的。 - 您可以通过 AJAX/fetch 等手动发送
POST
,然后将 webview 中页面的 HTML 替换为您的手册返回的 HTMLPOST
。您可以使用.executeJavaScript()
and/or Electron 的 IPC 来实现。
这两种解决方法都不适用于所有情况。也可能值得向 Electron 团队提交功能请求...
所以我直接提交了功能请求。你可以在这里关注它:https://discuss.atom.io/t/add-http-post-method-to-webview/29702
现在文档中有一个带有 postData
选项的新 <webview>.loadURL()
方法。我还没有使用过它,但它看起来和我过去寻找的一模一样。
他们似乎同时将其添加为一项功能。