IE9弄乱了我的应用程序

时间:2011-04-13 03:46:39

标签: c# browser internet-explorer-9

我使用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对象),我得到一个“Permission Denied”javascript错误。 (如果我不在同一页面中导航并运行这两个脚本,则它在两个IE版本上都能正常工作。)

我知道我的例子没用,但它只是一个样本。在其他情况下,使用包含指向外部C#对象的对象的javascript对象是有用的。

所以,即使这是一个超级特殊的问题,你有什么建议我可以做些什么来解决它或为什么我在IE9中遇到这个问题?

1 个答案:

答案 0 :(得分:0)

听起来您希望数据在页面之间保持不变。您是否考虑过以下任何一种情况:

  1. 将用户数据存储为Cookie。在后续页面加载中重新阅读它们

  2. 使用window.external托管C#代码中持续存在于页面之间的对象。