IE9把我的应用搞砸了
本文关键字:应用 我的 IE9 | 更新日期: 2023-09-27 17:49:47
我有一个用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
对象),我得到一个"拒绝许可"javascript错误。(如果我不导航并在同一页面运行两个脚本,它在两个IE版本上都可以正常工作。)
我知道我的例子是无用的,但它只是一个例子。在其他情况下,javascript对象包含指向外部c#对象的对象是有用的。
所以,即使这是一个超级特殊的问题,你有任何建议,我可以做些什么来解决它,或者为什么我有这个问题与IE9?
听起来您希望数据在页面之间持久存在。你有没有考虑过以下两种情况:
-
将用户数据存储为cookie。在随后的页面加载中重新读取
-
使用窗口。