Всем привет! Наверное каждый кто писал на js встречал такой не приятный баг, когда отключаешь показ js (которая по сути после отладки скрипта должен быть отключен, чтобы не нагружать браузер) не возможно остановить скрипт пока все конструкции iimPlayCode не будут пройдены, сегодня я вам покажу как это исправить.

Кстати отключить показ js можно отдельно в скрипте не отключая в настройках, для этого в самый вверх скрипт добавить такую строку

скрытый текст

Выделить код

Код:

//imacros-js:showsteps no


А чтобы исправить баг, добавляем в код такую функцию

скрытый текст

Выделить код

Код:

function iimPlayCode(code) {
    
    var Cc = Components.classes,
        Ci = Components.interfaces,
        wm = Cc["@mozilla.org/appshell/window-mediator;1"]
                .getService(Ci.nsIWindowMediator)
                .getMostRecentWindow("navigator:browser");

    iimPlay('CODE:' + code);

    if (iimGetLastError() == 'Macro stopped manually') {
            window.setTimeout(function() {
                wm.iMacros.panel.sidebar.
                document.getElementById('message-box-button-close').click()
            } , 4);
            throw 'Скрипт остановлен кнопкой стоп!';
    }
};


Теперь вы можете вызывать конструкцию iimPlayCode как обычно, но как только вы нажмите на кнопку стоп, скрипте будет немедленно остановлен.

Hamzat
думаю это известно, про команду:

скрытый текст

Выделить код

Код:

//imacros-js:showsteps no


есть информация на оф. сайте
скрытый текст
Javascript code running inside iMacros. The the //imacros-js:showsteps yes/no comment at the top of your Javascript file (including the //) overrides the global setting of "Show Javascript" checkbox in the option dialog.

Javascript_showsteps.png


про ошибку:

Macro stopped manually

можно догадаться, т.к. эта ошибка появляется на дисплее плагина.
во всяком случае, у меня на этот счет свое решение, основанное на принципе отлова данной ошибки, хотя смысл его по сути тот же, что и у вас.

в любом случае, спасибо за решение, для кого-то оно будет панацеей

InfSub

думаю это известно, про команду

Тут большинству faq прочитать лень, не то что оф сайт)

во всяком случае, у меня на этот счет свое решение, основанное на принципе отлова данной ошибки, хотя смысл его по сути тот же, что и у вас.

Если у вас есть лучшее решение, то это к лучшему, будем рады видеть код на форуме ))

Hamzat
оно аналогично, просто использует функции iMacros, а не его внутренний код, по этому, не вижу особого смысла дублировать ваше решение, т.к. оно просто записано несколько иначе

Благодарю автору за код! Как раз искал решение данной проблемы

да у меня скрипт при отключении показа .js нельзя остановить, но он прекрасно работает,
но если я добавляю в код функцию из первого поста, скрипт перестает находить фреймы.

Тестировалось на FirefoxPortable 35 и FirefoxPortableESR 46 , imacros 8.9.7