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

后端 未结 4 1208
遥遥无期
遥遥无期 2020-12-06 02:34

This seems really dumb. I\'ve tried a bunch of different ways and it\'s just not working. I have a WinForms app with a WebBrowser control. If I try with a raw html file on m

相关标签:
4条回答
  • 2020-12-06 02:36

    i came up on your post, while playing around with things following worked for me:

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

    , so all methods of helperscript.js can be invoked using

    webBrowser1.Document.InvokeScript("methodname");
    

    , here as a reference for the script invoke: How to inject Javascript in WebBrowser control?

    greetings

    0 讨论(0)
  • 2020-12-06 02:45

    There is a long story about workarounds of that "security fix" from MS. New behavior was implemented starting from IE7. Take a look into "base" tag and IE Feature controls.

    I did the following:

                        //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");
                    }
    
    0 讨论(0)
  • 2020-12-06 02:56

    This is because of security reasons. You need a webserver to do that, else you can access any file on a system which would be a big security hole.

    In developement mode, you can set e.g on chrome:

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

    And you will be able to run your code.

    0 讨论(0)
  • 2020-12-06 02:57

    Try adding file:// to the URL.

    0 讨论(0)
提交回复
热议问题