这看起来真的很蠢。我尝试了一些不同的方法,但它只是不起作用。我有一个带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://),它可以正常工作!
帮助!
答案 0 :(得分:11)
我出现在你的帖子上,同时玩弄以下为我工作的事情:
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");
,此处作为脚本调用的参考:How to inject Javascript in WebBrowser control?
问候
答案 1 :(得分:4)
尝试将file://
添加到网址。
答案 2 :(得分:1)
There is a long story关于MS的“安全修复”的解决方法。从IE7开始实施了新的行为。查看“基数”标记和IE Feature controls。
我做了以下事情:
//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");
}
答案 3 :(得分:0)
这是出于安全原因。您需要一个Web服务器来执行此操作,否则您可以访问系统上的任何文件,这将是一个很大的安全漏洞。
在开发模式中,您可以在chrome上设置例如:
chrome.exe --allow-file-access-from-files
您将能够运行您的代码。