发送带有电子webview的发布请求

时间:2015-12-09 21:00:50

标签: javascript webview http-post electron

我想从外部脚本发送一个POST请求Electron webview。目前我只是将src属性设置为触发页面加载,该页面加载会发送GET请求:

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

有没有办法通过发送POST请求将网页视图导航到网址?也许是webview的一种方法,而不仅仅是用src进行黑客攻击?

4 个答案:

答案 0 :(得分:6)

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

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

在您的情况下(如果已经加载了webview;例如已设置了.src):

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

一些评论:

  1. 请求的来源由webview的.src控制。
  2. 似乎所有默认安全政策仍由webview使用 - 具体而言,您无法从http:拨打https:
  3. 将代码作为字符串传递有点痛苦。

答案 1 :(得分:3)

现在,在文档中有一个新的<webview>.loadURL()方法,其中包含postData选项。我还没有使用它,但它看起来与我过去所寻找的完全一样。

在此期间,他们似乎将其添加为一项功能。

答案 2 :(得分:1)

基本上,Webview元素没有类似&#34;方法&#34;的属性。 Form,因此您无法为其请求指定特定的HTTP方法。我建议您使用AngularJS或任何其他JS框架来存档您的目的。

答案 3 :(得分:1)

我发现有两种解决方法,因为<webview>目前似乎无法发送POST请求。

  1. 也许您正在使用的网站允许您通过向网址的查询字符串添加任何表单元素,将表单作为GET发送。事实证明,我使用的网站确实允许这样做,如果我没有真正尝试过,我就不会猜到了。
  2. 您可以通过AJAX / fetch等手动发送POST,然后使用手册POST返回的HTML替换webview中页面的HTML。您可以使用.executeJavaScript()和/或Electron的IPC来实现此目的。
  3. 两种解决方法都不适用于所有情况。可能值得向Electron团队提交功能请求......

    所以我继续提交功能请求。您可以在此处关注:https://discuss.atom.io/t/add-http-post-method-to-webview/29702