3

Я создал один скрипт, который показывает пароли при наведении курсора, как Windows 8 на щелчок.

Я сделал эту функцию через JavaScript с помощью следующего кода.

function text(){this.type="text"}function password(){this.type="password"}function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}}addHandlers()

Извините за упакованный код JavaScript, но я хочу создать закладку или букмарклет для запуска скрипта thiss ...

Я старался:

javascript:(mycode);

Но это не сработало ...

2 ответа2

3

Чтобы решить вашу конкретную проблему, мне удалось заставить ваш код JavaScript работать без ошибок в этой версии:

javascript:(function(){function text(){this.type="text"};function password(){this.type="password"};function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}};addHandlers();alert("bookmarklet loaded");})();

Чтобы проверить, работает ли ваш код, я добавил alert("bookmarklet loaded"); в конце букмарклета. Так что вы можете попробовать и должны - так как я тестировал на Firefox 17 - увидеть, как результат, появляется окно сообщения. Если ваш код работает или не работает, я не могу сказать, но, конечно, это был не вопрос.

Есть некоторые вещи, которые вы можете иметь в виду или упростить преобразование кода JavaScript в тегах <script></script> для букмарклета.

  • В обычном коде JavaScript символ новой строки может разделять две команды. Букмарклеты находятся в одной строке, поэтому заменяйте разрыв строки точкой с запятой ; ,

Пример здесь

Давайте иметь пример. Давайте получим два фрагмента исходного кода с двумя инструкциями:

var anumber=1
var atext="hallo"

Когда вы помещаете все в одну строку (= переводите строку в пробелы), вы сначала получите следующее:

var anumber=1 var atext="hallo"

Это больше не допустимый код JavaScript. Если вы хотите объединить две инструкции в одну строку, вам нужно разделить / разделить две инструкции с помощью точки с запятой, например:

var anumber=1; var atext="hallo"
  • Оберните все, что вы код в виде такого рода замыкания:
    javascript:(function(){ [...here your code...] })();

Есть довольно много сайтов, чтобы исследовать решение. Как здесь

0

Вы были на самом деле довольно близко. Вам просто нужно выразить это так:

javascript:(function(){mycode})();

В вашем примере вы можете попробовать это:

javascript:(function(){function text(){this.type="text"};function password(){this.type="password"};function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}};addHandlers()})();

Обратите внимание на точки с запятой, когда вы минимизируете свой код, некоторые из них вам не хватает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .