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?

IE9把我的应用搞砸了

听起来您希望数据在页面之间持久存在。你有没有考虑过以下两种情况:

  1. 将用户数据存储为cookie。在随后的页面加载中重新读取

  2. 使用窗口。