У меня есть веб-приложение, написанное на 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?