Javascript bookmarklet перейдите по URL и выполните - PullRequest
16 голосов
/ 18 августа 2011

У меня есть такой javascript, используемый ia bookmarklet:

window.location="URL"
document.getElementById('username-id').value = 'User'
document.getElementById('pwd-id').value = 'pass'
doLogin();

Проблема в том, что javascript останавливается, как только он попадает в URL.Как заставить его перейти на страницу и выполнить скрипт?

Любая помощь будет принята с благодарностью.

Ответы [ 5 ]

13 голосов
/ 26 апреля 2012

Я не рекомендую расширения браузера - они позволяют запускать ненадежный код в контексте доверенного кода. Если у вас есть расширение для браузера, которое загружает страницу и автоматически вводит ваш ID пользователя и пароль, что мешает ему публиковать эти учетные данные на вредоносном сайте? Только вы, и только если вы внимательно прочитали исходный код.

Чтобы решить вышеуказанную проблему, я добавил в панель избранного в браузере закладки, которые требуют двух кликов: 1. Нажмите, чтобы перейти к месту 2. Нажмите, чтобы заполнить форму

javascript: 
 var L='http://mysite.com/';
 if(location!=L)location=L;
 else{
  document.getElementById('username-id').value='User'; 
  document.getElementById('pwd-id').value = 'pass';
  document.close();
  doLogin(); 
 }

Удачи!

5 голосов
/ 18 августа 2011

К сожалению, ваш букмарклет не будет работать.Изменение window.location приводит к загрузке новой страницы - вы не можете выполнить любой Javascript на этой странице без предварительного представления документа.

Требуемое действие может быть достигнуто с помощью расширений браузера, например скрипта Greasemonkey, который выполняет указанныйJavascript на странице при загрузке страницы.

2 голосов
/ 18 августа 2011

Если вы управляете загружаемой страницей, я бы подумал передать эти данные как фрагмент и обработать их со страницы. Что-то вроде window.location="URL#username=...;password=...", чем парсинг данных из фрагмента на странице и выполнение с ним всего, что вам нужно. Однако в данном конкретном случае это не очень хорошая идея, поскольку пароль будет сохранен в истории просмотров.

0 голосов
/ 07 февраля 2019

Если вы хотите запустить букмарклет со страницы, загруженной в тот же домен (и с той же схемой), что и ваше целевое местоположение, вы можете сделать это (вроде), загрузив его в iframe.

javascript:
document.body.innerHTML = '<iframe src="http://example.com/page2.html" onload="this.contentWindow.location.assign(`javascript:
    document.body.style.textTransform = \'uppercase\'; /* put code here */
void(0);`); this.onload = null;" width=100% height=100%>';

Обратите внимание на использование обратных тиков для многострочной строки для удобочитаемости.onload = null требуется для предотвращения бесконечного цикла, так как onload сработает после того, как местоположению присвоен код javascript.

(протестировано только в Chrome.)

0 голосов
/ 18 августа 2011

Попробуйте обернуть ваш код событием window.onload.

window.location = "URL"; window.onload = function() {
document.getElementById('username-id').value = 'User'
document.getElementById('pwd-id').value = 'pass'
doLogin();
}

Поскольку приведенное выше решение не работает, вы все равно должны написать простое расширение для браузера, чтобы решить вашу проблему. Это просто: выберите браузер, который вы используете, и следуйте документации. Это единственный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...