В доступе Javascript отказано в ошибке при использовании Atalasoft DotImage

Имейте настоящую загадку здесь. Я использую Atalasoft DotImage, чтобы позволить пользователю добавить некоторые аннотации к изображению. Когда я добавляю две аннотации одного и того же типа, содержащие текст с одинаковым именем, я получаю сообщение об ошибке отказа в разрешении JavaScript в сжатых файлах Atalasoft js. Ошибка при доступе к элементу стиля правила:

В отладчике (Visual Studio 2010 .Net 4.0) я могу получить доступ к h._rule, но не к h._rule.style

Что в javascript может вызвать отказ в доступе при доступе к объекту?

Просто интересно, сталкивался ли кто-нибудь еще с этим. Я вижу несколько человек, использующих Atalasoft на SO, и я даже видел ответ от кого-то с Atalasoft. И да, я говорю с ними, но это никогда не повредит, чтобы выбросить это в толпу. Это происходит только в IE8, а не в FireFox. Спасибо Брайан

Обновления: да, с использованием последней версии: 9.0.2.43666

Под тем же именем (см. Комментарий ниже), я имею в виду, я создал аннотации по умолчанию, и они названы так, чтобы их можно было добавить позже с помощью javascript.

// создаем аннотацию по умолчанию TextData text = new TextData(); text.Name = "DefaultTextAnnotation"; text.Text = "Текстовая аннотация по умолчанию:\n двойной щелчок для редактирования"; //text.Font = new AnnotationFont("Arial", 12f); text.Font = new AnnotationFont(_strAnnotationFontName, _fltAnnotationFontSize); text.Font.Bold = true; text.FontBrush = new AnnotationBrush(Color.Black); text.Fill = new AnnotationBrush(Color.Ivory); text.Outline = new AnnotationPen(new AnnotationBrush(Color.White), 2); WebAnnotationViewer1.Annotations.DefaultAnnotations.Add(текст);

В JavaScript: CreateAnnotation("TextData", "DefaultTextAnnotation");

function CreateAnnotation (type, name) {SetAnnotationModified (true); WebAnnotationViewer1.DeselectAll (); var ann = WebAnnotationViewer1.CreateAnnotation (тип, имя); WebThumbnailViewer1.Update(); }

1 ответ

Решение

В более ранней версии была ошибка, позволяющая сохранять аннотации с одинаковыми уникальными идентификаторами. Обычно это не вызывает проблем ни для каких аннотаций, кроме TextAnnotations, поскольку они используют уникальный идентификатор для создания класса CSS для текстового редактора. CSS не любит, когда два или более классов определяются одним и тем же именем, именно это и вызывает ошибку "Отказано в доступе".

Вы можете удалить уникальные идентификаторы из аннотаций без проблем. Ниже приведено несколько фрагментов кода, демонстрирующих, как это можно сделать. Вызов ResetUniques() после загрузки данных аннотации (на стороне сервера) должен обеспечить бесперебойную работу.

Дэйв С. от Atalasoft

protected void ResetUniques()
{
    foreach (LayerAnnotation layerAnn in WebAnnotationViewer1.Annotations.Layers)
    {
        ResetLayer(layerAnn.Data as LayerData);
    }
}

protected void ResetLayer(LayerData layer)
{
    ResetUniqueID(layer);
    foreach (AnnotationData data in layer.Items)
    {
        LayerData group = data as LayerData;
        if (group != null)
        {
            ResetLayer(data as LayerData);
        }
        else
        {
            ResetUniqueID(data);
        }
    }
}

protected void ResetUniqueID(AnnotationData data)
{
    data.SetExtraProperty("_atalaUniqueIndex", null);
}
Другие вопросы по тегам