Форма плагина для загрузки Wordpress не будет активирована в безгласном браузере

Я работаю над небольшим проектом, в котором PhamtomJS войдет на мой сайт и загрузит в него плагин. У меня почти есть это, за исключением одной странной проблемы. Хотя часть file.upload моего кода работает отлично, кнопка "Установить сейчас" остается отключенной. Вот изображение, сделанное из Phantom:

Снимок экрана

Как вы можете видеть, кнопка все еще отключена. Поэтому, когда я пытаюсь щелкнуть его с помощью метода getElementById(), он не будет работать. И не будет работать, если я попытаюсь представить форму, выполнив:

document.querySelector('form[action*="/wp-admin/update.php?action=upload-plugin"]').submit()

Я также попытался включить кнопку вручную, а затем щелкнул ее по Javascript, но это тоже не сработало. Любые идеи?

ИЗМЕНИТЬ Когда вы пытаетесь потянуть внешний HTML-код кнопки, я набрал следующее в console:

console.log(document.querySelector('#install-plugin-submit').outerHTML)

Результатом этого кода было следующее:

<input type="submit" name="install-plugin-submit" id="install-plugin-submit" class="button" value="Install Now">

Ответы

Ответ 1

Как вы получили значение в поле ввода файла? В зависимости от реализации браузера (клиента) просто добавление текста в качестве входного значения файла, вероятно, не приведет к событию box change.

Первое (прочтение: самое простое) решение может состоять в том, чтобы попробовать $('form.wp-upload-form input[type="file"]').trigger('change'); после того, как вы ударите его. (Если вы не используете jQuery, см. здесь о том, как запускать собственное событие, похоже, что вы уже знаете, как выбирать узлы. PhantomJS вполне может иметь собственную функцию запуска, потому что это то, что вы делаете в этом приложении.)

В противном случае вы можете просто загрузить файл через JS. Я на 4.7.3, и моя форма выглядит так:

<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="http://[server]/wp-admin/update.php?action=upload-plugin"> <input type="hidden" id="_wpnonce" name="_wpnonce" value="[nonce]"><input type="hidden" name="_wp_http_referer" value="/wp-admin/plugin-install.php"> <label class="screen-reader-text" for="pluginzip">Plugin zip file</label> <input type="file" id="pluginzip" name="pluginzip"> <input type="submit" name="install-plugin-submit" id="install-plugin-submit" class="button" value="Install Now" disabled=""> </form>

Объедините FormData, очистите URL-адрес отправки от тега действия в форме, убедитесь, что вы включили nonce и, вероятно, передаете значение submit для хорошей меры. Сборка multipart/form-data POST раздражает без подходящего плагина, но если вы дошли до этого, вам, вероятно, пришлось иметь дело с более раздражающими вещами.

WordPress не может отличить то, что вы отправляете из своей собственной формы, или то, что вы подделываете вместе, и бросать на тот же URL. Если это так, проверьте настройку клиентской строки, убедитесь, что у вас есть правый номер и убедитесь, что вы правильно настроили референт [sic.].