2015-12-09 4 views
3

Я хочу отправить запрос POST с использованием внешнего скрипта Electron webview. На данный момент я просто установить атрибут src чтобы вызвать загрузку страницы, которая отправляет запрос GET:Отправить заявку с электронным просмотром электрона

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

Есть ли способ перемещаться по WebView к URL, отправив запрос POST? Может быть, метод webview вместо того, чтобы просто взломать с помощью src?

+1

Возможно, загрузите специальную страницу, которая выполняет '

'? Может ли это работать? Или введите этот код JavaScript в '', который делает это? – flori

+0

Я думаю, что у вас есть лучший ответ, который будет работать во всех случаях - вводя ФОРМ в веб-представление, которое вы можете отправить, программным нажатием кнопки отправки и т. Д.! Если вы представите его в качестве ответа, вы выиграете награду (-: – hippietrail

ответ

2

Теперь в документах есть новый метод <webview>.loadURL() с опцией postData. Я еще не использовал его, но он выглядит точно так же, как и в прошлом.

Похоже, что они добавили его как функцию в то же время.

5

Вы можете выполнить произвольный код из контекста webview с помощью .executeJavaScript.

Кроме того, ваш код имеет доступ ко всем встроенным браузерам браузера. Самым простым было бы использовать fetch, с методом, установленным на post.

В вашем случае (при условии, что WebView был уже загружен, например, его .src установлен):

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

Некоторые замечания:

  1. Происхождение запроса контролируется .src веб-просмотра.
  2. Кажется, что все политики безопасности по умолчанию все еще используются веб-просмотром - в частности, вы не можете звонить на http: с https:.
  3. Очень сложно передать код в виде строки.
+0

Мое намерение состояло в том, чтобы перемещаться по веб-просмотру на этот URL-адрес вызова POST, это просто вызовет URL-адрес в фоновом режиме, верно? – flori

+1

Это будет не просто «звонок» «Веб-сайт. Он получит полную HTML-страницу и т. д. Эта страница не будет отображаться в веб-просмотре, но вы можете заменить« innerText »веб-представления на то, что было возвращено« методом POST ». Это может работать или не работать. также может анализировать возвращаемый HTML. Это зависит от того, что вы хотите сделать. Но вы не можете напрямую перемещаться по веб-просмотру с помощью POST в это время. – hippietrail

1

В принципе, элемент Webview не имеет свойства, как «метод» формы, поэтому вы не можете указать конкретный HTTP-метод для своего запроса. Я рекомендую использовать AngularJS или любые другие системы JS для архивирования вашей цели.

1

Я нашел два обходных пути, так как <webview> в настоящее время не имеет способа отправить запрос POST.

  1. Возможно, сайт, который вы используете, позволит вам отправить форму как GET, добавив в форму запроса любые элементы формы. Оказывается, сайт, который я использовал, позволил это, и я бы не догадался, если бы я на самом деле не пытался.
  2. Возможно, вы сможете отправить POST вручную через AJAX/fetch и т. Д., Затем замените HTML-страницу страницы в webview на HTML-код, возвращенный вашим руководством POST. Вы можете достичь этого, используя .executeJavaScript() и/или IPC от Electron.

Ни одно из них не будет работать в любом случае. Возможно, стоит подать заявку на функцию с командой Electron тоже ...

Так что я просто пошел вперед и отправил запрос функции. Вы можете следить за ним здесь: https://discuss.atom.io/t/add-http-post-method-to-webview/29702