繁体   English   中英

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

[英]How do I add a local script file to the HTML of a WebBrowser control?

这看起来真的很蠢。 我尝试了一些不同的方法,但它只是不起作用。 我有一个带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://),它可以正常工作!

救命!

我找到了你的帖子,同时玩了以下为我工作的东西:

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");

,这里作为脚本调用的参考: 如何在WebBrowser控件中注入Javascript?

问候

尝试将file://添加到URL。

关于MS的“安全修复”的解决方法有一个很长的故事 从IE7开始实施了新的行为。 查看“基本”标记和IE功能控件

我做了以下事情:

                    //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");
                }

这是出于安全原因。 您需要一个Web服务器来执行此操作,否则您可以访问系统上的任何文件,这将是一个很大的安全漏洞。

在开发模式中,您可以设置例如chrome:

chrome.exe --allow-file-access-from-files  

并且您将能够运行您的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM