我有用C#写的网页抓取appliaction,使用WebBrowser
。IE9搞砸了我的应用程序
它的一个特点是它可以让用户编写一个在网页中被注入和调用的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?
Javascript能够解决系统中“浏览器外部”的问题是一个可怕的概念。浏览器安全系统中的任何漏洞,即使得到充分保护,都会被利用。 – 2011-04-13 03:52:44
无论如何,浏览器安全系统中的任何漏洞总会被利用。尽管如此,我认为这对我的情况不会有任何问题。 – Juan 2011-04-13 03:57:41
这不是一个安全问题,因为浏览器只能访问你放在那里的东西。 – Gabe 2011-04-13 04:05:59