IE9 испортил мое приложение - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть веб-приложение, написанное на C #, которое использует WebBrowser.

Одной из его особенностей является то, что он позволяет пользователю написать функцию javascript, которая будет внедряться и вызываться на веб-страницах. Это пользовательская функция, которая получает в качестве параметра объект C #, который, помимо прочего, содержит свойство с именем UserData, которое пользователь может использовать для хранения всего, что ему нужно, и оно останется там даже после перехода браузера в другой стр. Он также содержит Browser объект, который я просто буду использовать здесь в качестве примера.

Если я внедрил и вызвал следующую функцию, когда у меня установлен IE8:

function ToBeInjected(Global)
{
    function Data()
    {
        this.csObject = Global.Browser;
        this.jsObject = "hi";
    }

    Global.UserData = new Data();
}

затем перешел на другую страницу, вставил и вызвал эту функцию:

function ToBeInjected(Global)
{
    alert(Global.UserData.jsObject);    // works ok on IE8 and IE9 (shows "hi")
    alert(Global.UserData.csObject);    // works on IE8 (show the object's type) but not IE9 ("Permission Denied" error)
}

второй alert будет работать правильно и покажет мне тип моего Browser объекта (объект Global, передаваемый здесь и предыдущей функции, является тем же объектом).

Я знаю, что может показаться странным, что объект существовал после навигации в браузере, но он имел место, и у него всегда было и никогда не было проблем с этим, и мое приложение использовало это как функцию.

Но теперь я только что установил IE9, и объекты все еще остаются, но в этом конкретном случае, когда UserData является объектом javascript (Data объект), который содержит указатель (или как бы вы его ни называли) на внешний объект C # (объект Browser), я получаю сообщение об ошибке «Отказано в доступе». (Если я не перехожу и не запускаю оба скрипта на одной странице, он отлично работает в обеих версиях IE.)

Я знаю, что мой пример бесполезен, но это всего лишь образец. В других случаях полезно иметь объект javascript, содержащий объекты, указывающие на внешние объекты C #.

Итак, хотя это супер специфическая проблема, у вас есть ЛЮБОЕ предложение о том, что я могу сделать, чтобы решить ее или почему у меня эта проблема с IE9?

1 Ответ

0 голосов
/ 13 апреля 2011

Похоже, вы хотите, чтобы данные сохранялись между страницами. Задумывались ли вы о любом из следующего:

  1. Сохранение пользовательских данных в виде файлов cookie. Прочитайте их снова на последующих страницах загрузки

  2. Используйте window.external для размещения объекта в вашем коде C #, который сохраняется между страницами.

...