当designmode激活时,C#WebBrowser控件中的Javascript未执行

本文关键字:Javascript 执行 控件 C#WebBrowser designmode 激活 | 更新日期: 2023-09-27 18:13:13

解决方案:

当designmode设置为"on"时,Javascript不会在Web浏览器控件内执行,在我的情况下是:

document = webbrowser.Document as HTMLDocument;
document.designMode = "On";

designmode属性停止了web浏览器控件执行javascript,所以我将其更改为:

document.body.setAttribute("contentEditable", "true");

现在java脚本已经执行,编辑文档仍然是可能的,所以这个简单的更改为我解决了问题。感谢的所有回复

原始问题:

我正在尝试用WebBrowser控件实现一个C#GUI。在Webbrowser中,我调用本地存储的HTML文件,这些文件总是存储在C:或D:上,它们不在共享文件夹或类似的东西上。到目前为止一切都很好。

现在,我尝试在HTML文件中添加一些JavaScript,并添加一些编辑HTML表的基本功能(添加行、添加列等(。但是Javascript并不是在网络浏览器控件中执行的。我试着用IE打开文件,我得到了ActiveX内容的提示,我告诉IE"允许阻止的内容",一切都很好。(我没有得到网络浏览器控件中的提示。(现在的问题是:是否有可能在网络浏览器控件中"始终启用"任何类型的脚本,或者像IE一样进行提示?

当然,我搜索了网络和堆栈溢出,发现了几个解决方案:

  1. IE仅提示本地文件。来自任何网站的Javascript(例如。http://javatester.org/javascript.html)执行。将以下代码添加到本地HTML文件应该可以解决此问题(如上所述:https://msdn.microsoft.com/en-us/library/ms537628(v=vs.85(.aspx(。我用msdn网站上的一个非常基本的例子尝试了一下,它很有效,但在添加了更多的代码后,它就不再有效了。IE再次提示我,所以这个解决方案对我来说似乎不可靠。

    <!-- saved from url=(0014)about:internet -->

    <!-- saved from url=(0023)http://www.contoso.com/ -->

  2. 另一个解决方案是更改IE的安全设置,这也会影响Web浏览器控件。因此,我尝试将所有区域设置为最低安全级别(Internet选项->安全(,然后单击"自定义级别"以启用更多功能。但还是没用,我还是收到了提示。只有一件事我不明白:在正常模式下打开HTML文件会提示我执行脚本,但在私人模式下会立即执行任何脚本。这只是一个bug还是正常行为?但最终再次更改安全设置没有带来任何解决方案

  3. 我的C#程序中的Invokescript方法无法再次运行任何脚本。

  4. 直接编辑表(使用execCommand("enableInlineTableEditing", true);(不起作用,因为IE不支持此命令。

所以,如果你一直读到这一点,我不得不说谢谢。如果你有任何想法,如何在网络浏览器控件中可靠地激活JavaScripts,或者只是如何编辑网络浏览器控件内的html表,我会非常高兴:(

顺便说一句:我使用的是.NET 4.5,我测试了所有的解决方案和两台不同用户的电脑。最后,我为我的英语感到抱歉,希望大家都能理解。

edit:基本示例,它在IE中运行良好(甚至没有提示(,但在网络浏览器控件中不执行任何类型的JS:

<!doctype html>
<!-- saved from url=(0023)http://www.contoso.com/ -->
<html>
  <head>
    <title>A Mark of the Web Example test</title>
  </head>
  <body>
     <p>Hello, World</p>
     <script language="JavaScript">
        document.write ("Hello Javascript");
    </script>
    <p>
    alert test
    </p>
    <script language="JavaScript">
        alert("test");
    </script>
  </body>
</html>

当designmode激活时,C#WebBrowser控件中的Javascript未执行

当designmode设置为"on"时,Javascript不会在Web浏览器控件内执行,在我的情况下是:

document = webbrowser.Document as HTMLDocument;
document.designMode = "On";

designmode属性停止了web浏览器控件执行javascript,所以我将其更改为:

document.body.setAttribute("contentEditable", "true");

现在java脚本已经执行,编辑文档仍然是可能的,所以这个简单的更改为我解决了问题。感谢所有回复