我为WatiN(版本2.1)设置了一个简单的测试平台,其中包括:
var browser = new IE();
browser.GoTo("http://www.google.co.il"); // webpage doesn't matter really
browser.RunScript("alert(123)");
仅当未安装KB3025390时才有效。安装它会破坏上面的测试,其中包含HRESULT设置为E_ACCESSDENIED的UnAuthorizedAccessException。是什么赋予了?有没有解决方法?
更新:使用IWebBrowser2.Navigate2和" javascript:console.log(123)"然而,脚本的类型可以使用
更新#2:selenium项目的人们也注意到了这个问题:
https://code.google.com/p/selenium/issues/detail?id=8302
还创建了错误报告:
更新#3:IHTMLWindow2.setInterval和IHTMLWindow2.setTimeout也会抛出UnauthorizedAccess异常。这些方法在以下位置未标记为已弃用:
http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa741505%28v=vs.85%29.aspx
然而,他们受伤的同样受到同样的削减。更新#4:我在这篇文章中给出了推荐的方法:
https://stackoverflow.com/a/18546866/863651
为了动态调用" eval" IHTMLWindow2对象的方法(或任何其他方法)。得到了相同的" System.UnauthorizedAccessException"如上。所以也没有喜悦。
Microsoft建议使用" eval" over" execscript"然而,经过上述实验,我怀疑他们正在提及访问" eval"仅在浏览器中。
据我所知,到目前为止,当谈到成熟的IE11 +使用" eval"进程外(通过COM)似乎已完全禁止与窗口对象的任何其他函数调用一起,唯一的例外是上面提到的.Navigate2()的反向通道。
答案 0 :(得分:2)
事实证明,微软最终还是决定在COM级杀掉.execScript。只需安装适用于Windows的最新更新,包括kb3025390:在kb3025390带回COM级别的.execScript功能后,IE的更新之一
但请注意,.execScript不再可以通过IE的javascript访问。在这种背景下,它已经过去了。
答案 1 :(得分:1)
fyi:这个也没有用
ieInstance.Document.Script.<methodNameString>(<commaSeperatedParameterString>)
尝试在某些地方为我工作但不是所有地方
ieObject.Navigate "javascript:<methodNameString>(<commaSeperatedParameterString>)", Null, "_parent"
或
ieObject.Navigate2 "javascript:"<methodNameString>(<commaSeperatedParameterString>)", Null, "_parent"
现在尝试使用eval找出解决方案
答案 2 :(得分:0)
我找到了解决自动更新安装问题的方法。您只需创建一个包含以下内容的简单批处理文件即可。
{代码} @echo off
wusa / uninstall / kb:3025390 / quiet / norestart
<强> END 强> {代码}
然后转到任务计划程序,为此批处理文件创建一个新任务,以便根据您的要求每隔一小时或每天运行一次。将其添加为系统任务,以便它在后台运行,不会影响正在运行的自动化。