iMacros и socket.io

В моем сценарии iMacros я пытаюсь подключиться к серверу с помощью socket.io. Сначала я должен получить файл socket.io.js, оценить его, а затем использовать socket.io как обычно. Вот отрывок из моего сценария:

    function loadScriptFromURL(url) {
        try {
            var request = Components.classes['@mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest);
            request.open('GET', url, false);
            request.send();
            if (request.status !== 200) {
                var message = 'There was an error trying to connect to: ' + url + ', request status: ' + request.status;
                iimDisplay(message);
            }
            eval(request.response);
        } catch (e) {
            window.console.log(e);
            return false;
        }
        return true;
        //alert(request.respsonse);
    }

    loadScriptFromURL('http://localhost:3700/socket.io/socket.io.js');
    window.console.log(io.version); // returns 0.9.16
    var socket = io.connect('http://localhost:3700');

Проблема в том, что код Javascript, который выполняется iMacros, находится в области действия плагина (песочницы), и когда я использую метод подключения io, я получаю сообщение об ошибке «io.util is undefined». Есть ли способ заполнить этот метод, чтобы iMacros мог его видеть? Думаю, мне нужно внести некоторые изменения в файл socket.io.js, но пока не совсем уверен...


person cyxou    schedule 30.11.2013    source источник


Ответы (1)


Я потратил пару дней, чтобы найти решение. У меня есть другие ошибки, например "setTimeout() не является функцией, Blob не является функцией, разные неопределенные ошибки..." Это происходит потому, что код не выполняется в контексте текущего окна.

Решение:

Перейдите в "/node_modules/socket.io-client\socket.io.js"

Это клиентский javascript-код из URL "http://localhost:3000/socket.io/socket.io.js"

Заменить все:

"new Blob" -> "new window.Blob"
"instanceof Blob" -> "instanceof window.Blob"

And to do the same for:
Filereader - > window.Filereader
setTimeout() - > window.setTimeout()
clearTimeout() - > window.clearTimeout()
setTimeout() - > window.setTimeout()

Это работает для меня. Версия Node.JS — 5.3.0, версия Socket.IO — 1.4.5.

person Nagibaka    schedule 20.08.2016