Превратить JavaScript в закладку или букмарклет?
Я создал один скрипт, который показывает пароли при наведении, как 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 ответа
Чтобы решить вашу конкретную проблему, мне удалось заставить ваш код 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...] })();
Есть довольно много сайтов, чтобы исследовать решение. Как здесь
Вы были на самом деле довольно близко. Вам просто нужно выразить это так:
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()})();
Обратите внимание на точки с запятой, когда вы минимизируете свой код, некоторые из них вам не хватает.