Чтобы решить вашу конкретную проблему, мне удалось заставить ваш код 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...] })();
Есть довольно много сайтов, чтобы исследовать решение. Как здесь