Я пытаюсь создать букмарклет, который загрузит обсуждение Hacker News для страницы, на которой я нахожусь, если она существует.
Вот код, который у меня есть для запуска в REPL файла node.js:
// node.js stuff
require.paths.unshift('.');
var sys = require('util');
var alert = sys.puts;
var XMLHttpRequest = require("XMLHttpRequest").XMLHttpRequest;
//javascript: (function () {
//url = 'http://api.ihackernews.com/getid?url=' + encodeURIComponent(window.location.href);
url = 'http://api.ihackernews.com/getid?url=' + encodeURIComponent('http://blog.asmartbear.com/self-doubt-fraud.html');
http = new XMLHttpRequest();
http.open("GET", url, true);
http.onreadystatechange = (function () {
if (this.readyState == 4) {
alert('foo');
var ids = eval('(' + this.responseText + ')');
if (ids.length > 0) {
ids.reverse();
//window.href = ids[0];
alert(ids[0]);
} else {
alert('No stories found.');
}
}
});
http.send();
//})();
Это работает как ожидалось. (Он использует небольшой файл для имитации XMLHttpRequest в узле.)
Раскомментирование строк определения функции (и удаление других вещей node-js) дает мне симпатичную небольшую однострочную строку, однажды упакованную :
javascript:(function(){url='http://api.ihackernews.com/getid?url='+encodeURIComponent(window.location.href);http=new XMLHttpRequest();http.open("GET",url,true);http.onreadystatechange=(function(){if(this.readyState==4){alert('foo');var ids=eval('('+this.responseText+')');if(ids.length>0){window.href=ids[0]}else{alert('No stories found.')}}});http.send()})();
Однако при его запуске консоль ошибок Firefox выдает мне невероятно полезное сообщение «синтаксическая ошибка», за которой следует «()», указывающая на ошибку сразу после второй круглой скобки.
Я не использую Firebug, потому что его ночные и Firefox ночные не хотят сотрудничать в данный момент.
Решение этого, вероятно, скоро придет ко мне (обычно я выясняю это из процесса объяснения всего в этом текстовом поле), но я полагаю, я был бы признателен за любую помощь в этом. Это действительно беспокоит меня. : /