当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一样进行提示?
当然,我搜索了网络和堆栈溢出,发现了几个解决方案:
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/ -->
另一个解决方案是更改IE的安全设置,这也会影响Web浏览器控件。因此,我尝试将所有区域设置为最低安全级别(Internet选项->安全(,然后单击"自定义级别"以启用更多功能。但还是没用,我还是收到了提示。只有一件事我不明白:在正常模式下打开HTML文件会提示我执行脚本,但在私人模式下会立即执行任何脚本。这只是一个bug还是正常行为?但最终再次更改安全设置没有带来任何解决方案
我的C#程序中的Invokescript方法无法再次运行任何脚本。
直接编辑表(使用
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设置为"on"时,Javascript不会在Web浏览器控件内执行,在我的情况下是:
document = webbrowser.Document as HTMLDocument;
document.designMode = "On";
designmode属性停止了web浏览器控件执行javascript,所以我将其更改为:
document.body.setAttribute("contentEditable", "true");
现在java脚本已经执行,编辑文档仍然是可能的,所以这个简单的更改为我解决了问题。感谢所有回复