2011-04-13 105 views
0

我有用C#写的网页抓取appliaction,使用WebBrowserIE9搞砸了我的应用程序

它的一个特点是它可以让用户编写一个在网页中被注入和调用的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是包含指针(或不过你会称呼它)到外部C#中的JavaScript对象(Data对象)对象(Browser对象),我得到了“权限被拒绝”的JavaScript错误。 (如果我不在同一页面中导航和运行这两个脚本,它在两个IE版本上都可以正常工作。)

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

所以,即使这是一个超级特定的问题,你有任何建议我可以做些什么来解决它或为什么我有这个问题与IE9?

+0

Javascript能够解决系统中“浏览器外部”的问题是一个可怕的概念。浏览器安全系统中的任何漏洞,即使得到充分保护,都会被利用。 – 2011-04-13 03:52:44

+0

无论如何,浏览器安全系统中的任何漏洞总会被利用。尽管如此,我认为这对我的情况不会有任何问题。 – Juan 2011-04-13 03:57:41

+0

这不是一个安全问题,因为浏览器只能访问你放在那里的东西。 – Gabe 2011-04-13 04:05:59

回答

0

这听起来像你想要数据在页面之间保持。您是否考虑过以下任一项:

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

  2. 使用window.external在您的C#代码中托管一个在页面之间存在的对象。

+0

好吧,我刚刚使用window.external测试,但它给了我完全相同的问题。饼干是文本,因此对于我的特殊情况也没有用处:( – Juan 2011-04-13 04:07:46

+0

Cookie只能在给定域中使用,只能包含文本,并且对总大小有相当严格的限制。 – Gabe 2011-04-13 04:08:54

+0

@jsoldi:你是如何使用'window.external'来获取该错误的? – Gabe 2011-04-13 04:29:49