更新 Windows 后 Browser.ExecScript() 停止工作

2023-11-23

我已经为 WatiN(版本 2.1)建立了一个简单的测试平台,内容如下:

var browser = new IE();

browser.GoTo("http://www.google.co.il"); // webpage doesn't matter really
browser.RunScript("alert(123)");

这仅在以下情况下有效KB3025390未安装。安装它会破坏上述测试,并出现 UnAuthorizedAccessException,其中 HRESULT 设置为 E_ACCESSDENIED。是什么赋予了?有什么解决方法吗?

更新:使用 IWebBrowser2.Navigate2 以及“javascript:console.log(123)”类型的脚本可以正常工作

  • 使用这样的秘密渠道让我感到不安
  • 通过 .Navigate2() 的这个反向通道运行的脚本的最大长度可能只有大约 2070 个字符(给予或接受)否则它们会被强制截断到这个长度,从而在尝试运行它们时导致 javascript 错误
  • 使用 .Navigate2(),即使是最简单的脚本,将永远阻塞 Internet Explorer 的就绪状态,因为它将被设置为 READYSTATE_LOADING 而没有希望摆脱它。简单来说,这意味着一旦您使用此 hack,您必须以“不等待网页加载”的方式执行 WatiN 中的每个后续操作(GoToNoWait、ClickNoWait 等),以免您的代码冻结等待浏览器返回 READYSTATE_COMPLETE (当然,正如已经提到的,这永远不会发生)。
  • 这里似乎存在一个更广泛的问题,因为我什至无法访问 IHtmlWindow2 对象的属性。 window.document 再次引发未经授权的异常,使得几乎不可能将我正在运行的脚本的返回值(使用 Expando 等)传输到除 window.top.document 以外的文档(对于 window.top .document 窗口中有 IWebBrowser2.Document 可以实现这一点)

Update#2:selenium 项目的人们也注意到了这个问题:

https://code.google.com/p/selenium/issues/detail?id=8302

还创建了错误报告:

https://connect.microsoft.com/IE/feedback/details/1062093/installation-of-kb3025390-breaks-out-of-process-javascript-execution-in-ie11

Update#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

为了动态调用 IHTMLWindow2 对象的“eval”方法(或任何其他方法)。得到与上面相同的“System.UnauthorizedAccessException”。所以这里也没有欢乐。

微软建议使用“eval”而不是“execscript”,但是经过上述实验,我怀疑他们指的是仅从浏览器内访问“eval”。

据我所知,到目前为止,当涉及到成熟的 IE11+ 时,使用“eval”进程外(通过 COM)似乎已与窗口对象的任何其他函数调用一起被完全禁止,唯一的例外是上面提到的 .Navigate2() 的反向通道。


事实证明,微软最终改变了在 COM 级别取消 .execScript 的决定。只需安装 Windows 的最新更新,包括 kb3025390:kb3025390 之后发布的 IE 更新之一在 COM 级别恢复了 .execScript 功能

但请注意,.execScript 无法再通过 IE 的 javascript 访问。在这种情况下,它就永远消失了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新 Windows 后 Browser.ExecScript() 停止工作 的相关文章

随机推荐

  • Python:如何将数字向下舍入到下一个 1000

    在Python中 有一个内置函数round 它对数字进行四舍五入 如下所示 round 1900 3 2000 是否有一个内置函数可以将数字向下舍入 如下所示 function 1900 3 1000 您可以使用楼层划分 def round
  • 函数和/或类的包可访问性

    在Java中 他们有包访问说明符 它使得该函数只能由来自同一个 包 命名空间 的类使用 我看到了它的好处 尤其是当模型设计发挥作用时 你认为这样的东西在 C 中有用吗 Thanks 正如其他人指出的那样 通常的方法只是按照惯例 但是 C 确
  • PHP 解析/语法错误;以及如何解决它们

    每个人都会遇到语法错误 即使是经验丰富的程序员也会犯错 对于新人来说 这只是学习过程的一部分 但是 通常很容易解释错误消息 例如 PHP 解析错误 语法错误 index php 第 20 行出现意外的 意想不到的符号并不总是真正的罪魁祸首
  • 如何在javascript下划线模板中转义<>?

    使用下划线模板时 我想在锚点的 href 属性中插入一个值 例如 a href class products underscore template in jade 但输出是 a href class products 那么如何转义 符号
  • Play Framework:PersistenceException:该类型不是已注册的实体? (伊豆)

    我正在遵循 Java 的 Play Framework 2 0 教程 并在尝试保存 ebean 模型时收到此错误 task save PersistenceException 类型 class models Task 不是 注册实体 如果您
  • 在 R 中如何获取英文错误消息

    我正在尝试一些关于生物导体的教程 但我收到错误消息 我想搜索 提交 不幸的是 由于 R 安装在以法语配置的系统上 因此 R 以法语返回给我消息 我怎么可能有这些英文信息 我的系统 Ubuntu 10 04 运行 gnome 3 R版本是最后
  • 为什么大多数浏览器上的预检请求中不包含 TLS 客户端证书?

    我正在构建的网络应用程序遇到问题 该 Web 应用程序由 Angular 4 前端和 dotnet core RESTful API 后端组成 需求之一是对后端的请求需要使用SSL相互认证进行认证 即客户端证书 目前 我将前端和后端托管为
  • 使用用户通过实体框架提供的 XPath 查询 SQL Server xml 列

    我很难弄清楚如何在 SQL Server 中使用 xml 数据列 特别是与实体框架一起使用 基本上 我们的一个表存储用户以 XML 形式提供的 自定义元数据 因此将其存储在表中的 Xml 列中似乎是明智的 然而 我们应用程序的要求之一是支持
  • WCF 自托管应用程序可以使用 app.config 自动创建 ServiceHost 吗?

    当我创建自托管 wcf 应用程序时 我为要公开的每个服务创建 ServiceHost 对象 然后它会在 app config 中查找 匹配服务器名称 然后提取关联的端点地址和合约 有没有办法为 app config 中列出的每个服务自动创建
  • SceneKit:理解SCNNode的pivot属性

    目标是增加 SCNBox 的长度 使其仅在 z 正方向上增长 这个答案建议玩pivot财产 然而 该文档的pivotSCNNode页面上属性稀疏 SCNBox页面上没有任何内容 有人可以解释一下如何pivot物业工作 改变节点的pivot从
  • 隐藏任务栏中工作进程的图标

    如何在vb net中隐藏任务栏中的工作进程图标 Dim startInfo As New ProcessStartInfo Some Process startInfo WindowStyle System Diagnostics Proc
  • IIS7重写映射正则表达式?

    是否可以在重写映射中使用正则表达式 例如
  • 如何在Python中使用Pandas合并后找到删除的数据?

    我的数据框如下所示 我正在使用 Pandas 合并函数来合并两个数据框 并且我试图找到被删除的行 Pandas 或 python 有没有办法跟踪这个 df1 pd DataFrame Name A B C Age 34 23 90 df2
  • 多个序列的惰性笛卡尔积(序列的序列)

    你能建议更简单 更清晰的方法来编写这个函数吗 let cartesian product sequences let step acc sequence seq for x in acc do for y in sequence do yi
  • CRM 2016 FakeXrmEasy N:N 关系

    我正在尝试使用FakeXrmEasy为 CRM Online 2016 执行一些单元测试 但我在设置具有 N N 关系的测试之一时遇到问题 以下代码设置了一个包含 2 个实体的 Faked Context 并初始化了一个 Faked Org
  • 使用 AngularJS 时如何转义大括号以显示在页面上?

    我希望用户看到双花括号 但 Angular 会自动绑定它们 这是相反的情况这个问题他们不希望在页面加载时看到用于绑定的大括号 我希望用户看到这个 My name is person name 但 Angular 取代了 person nam
  • 如何更改 vim 中未使用的背景颜色?

    如何更改 vim 编辑器未使用的 底部部分 希望这张照片能澄清我可怕的描述 该部分由突出显示组 NonText 控制 因此 您可以在 colorcheme 行之后添加以下行 将背景颜色设置为蓝色 highlight NonText cter
  • 为什么 Dapper 无法返回多个插入的行 ID?

    我有一个 SQL Server 表 其中使用以下命令插入行 var sql DECLARE InsertedRows AS TABLE Id BIGINT INSERT INTO Person Name Age OUTPUT Inserte
  • 切换用户或重新使用 Instagram 进行身份验证

    继Instagram 文档我能够轻松验证用户身份并检索 access token 但现在我想更改 Instagram 帐户 这是不可能的 因为浏览器会自动调用我的回调 URL 因为我已经使用帐户登录 再次没有登录 授权表单 解释一下这里发生
  • 更新 Windows 后 Browser.ExecScript() 停止工作

    我已经为 WatiN 版本 2 1 建立了一个简单的测试平台 内容如下 var browser new IE browser GoTo http www google co il webpage doesn t matter really