C# 如何将本地脚本文件添加到WebBrowser控件的HTML中?
这似乎真的很愚蠢。我试过很多不同的方法,但都不管用。我有一个带有WebBrowser控件的WinForms应用程序。如果我尝试在桌面上使用相同的src字符串处理一个原始html文件,那么我创建的src可以正常工作。但是将同样的东西插入WebBrowser控件是行不通的 这是我的密码:C# 如何将本地脚本文件添加到WebBrowser控件的HTML中?,c#,javascript,html,webbrowser-control,C#,Javascript,Html,Webbrowser Control,这似乎真的很愚蠢。我试过很多不同的方法,但都不管用。我有一个带有WebBrowser控件的WinForms应用程序。如果我尝试在桌面上使用相同的src字符串处理一个原始html文件,那么我创建的src可以正常工作。但是将同样的东西插入WebBrowser控件是行不通的 这是我的密码: HtmlElementCollection head = this.wbPreview.Document.GetElementsByTagName( "head" ); if (head != null) {
HtmlElementCollection head = this.wbPreview.Document.GetElementsByTagName( "head" );
if (head != null)
{
HtmlElement elm = this.webBrowserControl.Document.CreateElement("script");
string mySource = Environment.CurrentDirectory + @"\MyScriptFile.js";
elm.SetAttribute("src", mySource);
elm.SetAttribute("type", "text/javascript");
((HtmlElement)head[0]).AppendChild(elm);
}
WebBrowser无法获取脚本。但是,如果我将“mySource”更改为外部资源(通过http://),它可以正常工作
救命啊 尝试将
文件://
添加到URL。这是出于安全原因。要做到这一点,您需要一个Web服务器,否则您可以访问系统上的任何文件,这将是一个很大的安全漏洞
在开发模式下,您可以在chrome上设置:
chrome.exe --allow-file-access-from-files
您将能够运行您的代码。关于MS的“安全修复”的变通方法。新行为从IE7开始实施。查看“基本”标记和
我做了以下工作:
//TODO: if not mono
var executableFilename = Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly().Location);
var keys = new[] { executableFilename, [vsname]+".vshost.exe" }; //check!
Action<string, object, string> SetRegistryKeyOrFail =
(key, val, regStr) =>
{
var reg =
Registry.CurrentUser.CreateSubKey(regStr);
if (reg == null) throw new Exception("Failed registry: " + regStr);
reg.SetValue(key, val);
};
foreach (var key in keys)
{
SetRegistryKeyOrFail(key, 1, @"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BLOCK_LMZ_IMG");
SetRegistryKeyOrFail(key, 0, @"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BLOCK_LMZ_SCRIPT");
}
//TODO:如果不是单声道
var executableFilename=Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly().Location);
var keys=new[]{executableFilename[vsname]+“.vshost.exe”}//检查!
操作SetRegistryKeyOrFail=
(键、val、regStr)=>
{
var注册=
Registry.CurrentUser.CreateSubKey(regStr);
if(reg==null)抛出新异常(“失败的注册表:+regStr”);
注册表设置值(键,值);
};
foreach(var键入键)
{
SetRegistryKeyOrFail(键,1,@“SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\u BLOCK\u LMZ\u IMG”);
SetRegistryKeyOrFail(键,0,@“软件\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\U块\U LMZ\U脚本”);
}
我是在你的帖子上出现的,当时我正在玩下面的东西:
HtmlElementCollection head = webBrowser1.Document.GetElementsByTagName("head");
if (head != null)
{
HtmlElement elm = webBrowser1.Document.CreateElement("script");
elm.SetAttribute("type", "text/javascript");
elm.InnerText = System.IO.File.ReadAllText(Environment.CurrentDirectory + @"\helperscripts.js");
((HtmlElement)head[0]).AppendChild(elm);
}
,因此可以使用调用helperscript.js的所有方法
webBrowser1.Document.InvokeScript("methodname");
,此处作为脚本调用的参考:
问候我确实这样做了,并且尝试了我能找到的所有其他已知术语。我使用了绝对值、相关值、使用URI等。不可以。出现此错误:{“此类型的HtmleElement不支持属性。”}它可以工作,但当尝试将大脚本设置为
elm.InnerText
,该过程会停止响应很长一段时间。具体取决于您的Windows功能仿真版本(旧版ie)elm.InnerText
可能会失败。相反,我们可以使用elm.SetAttribute(“TEXT”,…)