Javascript C# 中的 WebBrowser 控件在激活设计模式时未执行

Javascript in C# WebBrowser Control not executed when designmode activated

解决方法:

当 designmode 设置为 "on" 时,

Javascript 不会在 webbrowser-control 中执行,在我的例子中是:

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

设计模式 属性 停止了 webbrowser-control 执行 javascript,所以我将其更改为以下内容:

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

现在 javascripts 已经执行并且仍然可以编辑文档,所以这个简单的更改解决了我的问题。感谢所有回复

原题:

我正在尝试使用 WebBrowser 控件实现 C# GUI。在 Webbrowser 中,我调用本地存储的 HTML-Files,文件始终存储在 C: 或 D: 中,它们不在共享文件夹或类似文件夹中。 目前一切正常。

现在我尝试将一些 JavaScript 添加到 HTML-Files 中,具有一些基本功能来编辑 html-tables(添加行、添加列等)。但是 Javascript 没有在 webbrowser-control 中执行。我尝试用 IE 打开文件,但系统提示我输入 ActiveX 内容,我告诉 IE "Allow blocked content",一切正常。 (我没有在 webbrowser-control 中得到提示。) 现在的问题是:是否可以 "always enable" 在网络浏览器控件中编写任何类型的脚本或以与 IE 相同的方式进行提示?

当然我搜索了 Web 和 Whosebug,我找到了几个解决方案:

  1. IE只提示本地文件。 Javascript 来自任何网站(例如 http://javatester.org/javascript.html) is executed. Adding the following Code to the local HTML-File should fix this problem (as mentioned here: 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的安全设置,这应该也会影响webbrowser-control。所以我尝试将所有区域设置为最低安全级别(Internet 选项 -> 安全),之后我单击 "custom level" 以启用更多。但它仍然没有用,我仍然得到提示。只有一件事我不明白:Open HTML-Files in normal-mode 提示我执行脚本,但 inprivate-mode 立即执行任何脚本。这只是一个错误还是正常行为?但最终再次更改安全设置没有解决方案

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

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

所以如果你读到这里,我不得不说声谢谢。如果你有任何想法,如何可靠地激活 webbrowser-control 中的 JavaScripts 或者如何编辑 webbrowser-control 中的 html-tables,我会很高兴 :)

顺便说一句:我使用的是 .NET 4.5,我测试了所有的解决方案和两台不同用户的不同 PC。最后对不起我的英语,希望大家能理解。

编辑:基本示例,在 IE 中运行良好(甚至不提示),但在 webbrowser-control 中不执行任何类型的 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 设置为 "on" 时,

Javascript 不会在 webbrowser-control 中执行,在我的例子中是:

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

设计模式 属性 停止了 webbrowser-control 执行 javascript,所以我将其更改为以下内容:

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

现在 javascript 已执行并且仍然可以编辑文档,所以这个简单的更改为我解决了问题。感谢所有回复