C# 如何将本地脚本文件添加到WebBrowser控件的HTML中?

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) {

这似乎真的很愚蠢。我试过很多不同的方法,但都不管用。我有一个带有WebBrowser控件的WinForms应用程序。如果我尝试在桌面上使用相同的src字符串处理一个原始html文件,那么我创建的src可以正常工作。但是将同样的东西插入WebBrowser控件是行不通的

这是我的密码:

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”,…)