【问题标题】:Internet Explorer Script Error, Message from Webpage, Permission deniedInternet Explorer 脚本错误,来自网页的消息,权限被拒绝
【发布时间】:2010-08-16 16:52:22
【问题描述】:

我正在使用 VB6 应用程序中的嵌入式(Active X?)IE 实例。

浏览器显示基于所选人员的人口统计信息(显示为列表)。

一切都很好,直到我尝试从列表中快速选择不同的人(尽可能快地随机点击不同的人)。单击几下后,出现两个错误。

第一个是“Internet Explorer 脚本错误

上面写着:

此页面上的脚本出现错误
线路:
字符:
错误:
代码:
网址: 您想继续在此页面上运行脚本吗?是|不是

(Line、Char、Error、Code、URL 均为空白)。

第二个错误直接弹出第一个错误。

上面写着:

"来自网页的消息

此对话框中出现错误
错误:53 权限被拒绝
"

该页面进行了多次 ajax 调用,并且还包含多个 iFrame(我认为这些是原因)。

任何有关如何调试/解决/避免问题的建议将不胜感激。

谢谢!

编辑

这是错误的图像

编辑

我得到一个 JScript 匿名函数,当我碰巧发现错误时没有可用的源。

编辑

我已经成功地发现了一些错误。似乎它们主要来自 MicrosoftAjax.js

  • 始终出现:MicrosoftAjax.js - Sys._Application.callBaseMethod(this,"initialize");预期对象
  • 发生一次:jquery-1.4.2.min.js - b.InsertBefore(d,b.firstChild) 预期对象
  • 发生一次:内存不足异常。

我的宿主应用程序根本没有使用 MicrosoftAjax.js,但子 iFrame 应用程序都是 asp.Net 应用程序。

【问题讨论】:

  • 我没有嵌入式浏览器实例的经验以及它是否适用,但是有一个用于 IE 的脚本调试器:microsoft.com/downloads/… 除此之外,还需要查看一些源代码。不能在VB6实例外测试网页吗?
  • 是的,我可以,但是在这个嵌入式浏览器之外几乎不可能重现该错误。通常当我抓住它时,它会说,“没有可用的来源。”如果我知道要向你们展示什么,我会提供源代码。问题是这个项目非常非常大,我什至不知道从哪里开始。

标签: c# javascript asp.net internet-explorer


【解决方案1】:

经过大量测试并试图弄清楚我是否真的需要编辑 MicrosoftAjax.js 来解决问题后,我终于找到了一个似乎已经解决问题的解决方案。

我加了,

<script type="text/javascript">         
  window.onerror = function (e) { return true; }        
</script>

到我通过 iFrame 拉入的应用程序的标题以及父页面。自从我进行这些更改以来已经过去了大约两天,到目前为止一切都很好(尽管我还需要几天的测试才能确认它 100% 工作)。

我之前尝试过这个但没有成功,但那是由于脚本的位置。我在它之前放置了其他脚本(如 jQuery 和 MicrosoftAjax)。这些脚本在我的 window.onerror 脚本被评估之前就抛出了错误。

另一个有趣的事情是,无论父页面上的错误处理如何,iFrame 错误似乎都会冒泡。因此,我进入了我们的代码存储库,并对我引入的每个应用程序进行了必要的更改。

最后,我要感谢 @Jacob 为解决此问题提供的初步帮助。

编辑

只是想补充一点,我宁愿修复错误而不是埋葬它,但是为了时间,这是我现在采用的解决方案。

【讨论】:

  • 哇,onerror 看起来很有帮助。甚至不知道那个。
【解决方案2】:

如果您只想抑制 Javascript 错误,请尝试将 WebBrowserSilent 属性设置为 True

【讨论】:

  • 我认为这是我们要采用的解决方案,但我必须等待其他开发团队实施更改,然后才能进行测试。如果它有效,我会将其标记为答案,尽管最好弄清楚为什么错误被抛出只是隐藏它。感谢您的帮助!
  • 刚从开发测试中回来,设置静音不起作用。我们仍然能够抛出错误。
【解决方案3】:

我发现大多数 IE “权限被拒绝”错误与在窗口/框架之间共享 Javascript 对象有关。由于您通过快速随机点击生成它,我猜这与 iframe/windows 在其内容仍在访问时消失有关。

您可以用来避免这些问题的一种策略是永远不要在框架之间共享任何对象。无论在何处创建对象,该框架都应负责所有操作和对其成员的访问。外部访问应完全通过调用“接口”Javascript 函数来控制。

【讨论】:

  • 我认为你认为它是 iframe 是对的。在我把它们拿出来后,错误就消失了。我不认为我在做任何对象共享,但我可能是错的(在 iframe 中运行的应用程序本身就相当广泛,而且我没有编写它们)。是否有一种方法可以“停止”来自父级的 iframe 中的所有进程。像“window.onbeforeunload...$('iframe').stop();”这样的东西?
  • 我不知道该怎么做,抱歉。但是,如果您只想抑制 Javascript 错误,请尝试我的其他答案。
【解决方案4】:

试试

WebBrowser1.ScriptErrorsSuppressed = true;

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2011-02-26
    • 2014-10-19
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多