2010-10-27 7 views
11

यह वास्तव में गूंगा लगता है। मैंने विभिन्न तरीकों का एक गुच्छा करने की कोशिश की है और यह अभी काम नहीं कर रहा है। मेरे पास WebBrowser नियंत्रण वाला WinForms ऐप है। यदि मैं एक ही src स्ट्रिंग का उपयोग कर अपने डेस्कटॉप पर एक कच्ची HTML फ़ाइल के साथ प्रयास करता हूं, तो मैं जो स्रोत डालता हूं वह ठीक काम करता है। लेकिन WebBrowser नियंत्रण में एक ही सामान प्लगिंग काम नहीं करेगा।मैं WebBrowser नियंत्रण के HTML पर स्थानीय स्क्रिप्ट फ़ाइल कैसे जोड़ूं?

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 स्क्रिप्ट नहीं होती है:

यहाँ मेरी कोड है। हालांकि, अगर मैं बाहरी संसाधन (http: // के माध्यम से) "mySource" को बदलता हूं, तो यह ठीक काम करता है!

सहायता!

उत्तर

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

यह त्रुटि प्राप्त हो रही है: {"संपत्ति इस प्रकार के HtmlElement पर समर्थित नहीं है।"} – MonsterMMORPG

+0

शायद केवल आईई – womd

+0

में काम कर रहा है यह काम करता है, लेकिन जब 'elm.InnerText' पर एक बड़ी स्क्रिप्ट सेट करने का प्रयास करते हैं, तो प्रक्रिया केवल प्रत्युत्तर देना बंद कर देती है काफी देर। – Gildor

4

URL पर file:// जोड़ने का प्रयास करें।

+0

मैं वास्तव में ऐसा ही किया और अन्य सभी ज्ञात नामावली मैं ढूँढने में सक्षम था प्रयास किया है। मैंने निरपेक्ष, रिश्तेदार, यूआरआई के बजाय, आदि का उपयोग किया है। नहीं जाना। – IAmAN00B

0

यह सुरक्षा कारणों से है। ऐसा करने के लिए आपको एक वेबसर्वर की आवश्यकता है, अन्यथा आप किसी सिस्टम पर किसी भी फ़ाइल तक पहुंच सकते हैं जो एक बड़ा सुरक्षा छेद होगा।

developement मोड में, आप क्रोम पर उदाहरण के सेट कर सकते हैं:

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

और आप अपने कोड को चलाने के लिए सक्षम हो जाएगा।

1

There is a long story एमएस से "सुरक्षा सुधार" के कामकाज के बारे में। आईई 7 से शुरू किया गया नया व्यवहार लागू किया गया था। "बेस" टैग और 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"); 
       } 
संबंधित मुद्दे