Доброго времени суток. Столкнулся с такой вот проблемой.
Описываю класс, вот так:

var MyClass = function ()
{
...
}

Потом в этом же скрипте определяю ему метод через прототип вот так (пробовал также описывать метод внутри класса):

MyClass.prototype.NewMethod = function () {
...
}

В коннектор сохраняю ссылку на екзэмпляр этого клаксса.
При вызове этого метода (да и вообще любого метода класса) возникает ошибка:

Microsoft JScript: Не удается выполнить программу из освобожденного сценария.

Гугл говорит, что такая проблема может возникнуть в ИЕ при расширении яваскрипт объекта в другом фрейме и мол решение - не расширять.
Может кто сталкивался с подобной проблемой?
Просто я уже много раз так делал, да и в базовом функционале куча подобного кода, и никаких проблем не было, может что-то забыл, может проблема в конкретном интерпритаторе jscript'a ...

Нравится

5 комментариев

Юрий, к сожалению, из-за особенностей реализации includ'ов в конфигурации перегрузка прототипов не поддерживается.

"Стоян Виталий" написал:Юрий, к сожалению, из-за особенностей реализации includ'ов в конфигурации перегрузка прототипов не поддерживается.

Как это!? scr_JSON, scr_RegExp например, там по всюду через прототип объявляются новые методы.
Ну и я пробовал не только перегрузкой через прототип, а так же добавлял метод в тело класса аля:

var MyClass = function ()
{
 this.MyMethod = function () {};
 
}

ошибка та же.
Да и сто процентов в других проектах пользовался именно таким методом и все работало...

Похоже проблема в том, что Вы сохраняете ссылку на js-объект в Connector. В базовой реализации от этого отходят, решая проблему включением необходимых скриптов с дальнейшим вызовом функций напрямую. Попробуйте сделать так же - включить скрипт, а дальше использовать функцию, а не передавать ссылку через коннектор.

"Стоян Виталий" написал:Похоже проблема в том, что Вы сохраняете ссылку на js-объект в Connector

Я Иисусом клянусь, что уже так делал и все работало на версии 3.3.х.х. Кстати, боюсь ошибится, но по-моему базовый функционал интеграции с CallCenter'а тоже создает JS-объекты на базе своих js-классов(в зависимости от типа CallCenter) и именно сохраняет ссылки в коннектор (если не прав - проправьте, а то под рукой нет TSAdmin'a).

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

По поводу колл-центра не подскажу, но вот по поводу includ'ов -- это тот способ, который обеспечит вызов и выполнение функций. Возможно Вы уже так делали, как хотите, и у Вас работало, но в силу особенностей конфигурации этот способ, увы, проходит не всегда.

Показать все комментарии