2011-03-07 24 views
20

Sadece Visual Studio 2010 C# IDE'yi kullanmaya başladım.IHTMLScriptElement nedir?

WebBrowser bileşeni javascript enjekte çalışıyor ve stackoverflow cevabını takip ediyorum: söyleyerek IHTMLScriptElement

How to inject Javascript in WebBrowser control?

HtmlElement txtBox = webBrowser1.Document.GetElementById("UserEmailShortcut"); 
//js 
HtmlElement scriptOne = webBrowser1.Document.CreateElement("script"); 
IHTMLScriptElement element = (IHTMLScriptElement)scriptOne.DomElement; 
element.text = "function sayHello() { alert('hello') }"; 
txtBox.AppendChild(scriptOne); 
webBrowser1.Document.InvokeScript("sayHello"); 

Şimdi kırmızı dalgalı bir çizgi altında vardır:

Error 1 The type or namespace name 'IHTMLScriptElement' 
could not be found (are you missing a using directive or an assembly reference?) 
    C:\Users\m-tak\documents\visual studio 
2010\Projects\winformWithWebBrowserTest\winformWithWebBrowserTest\Form1.cs 
    25 13 winformWithWebBrowserTest 

belgelere göz attım http://msdn.microsoft.com/en-us/library/aa768904(v=VS.85).aspx

ama nedenini anlayamıyorum. Bu zaten dahil değildir ve sadece "using IHTMLScriptElement" (bunun çalışmadı) içermesi gerekmez.

cevap

31

Proje + Başvuru Ekle'yi seçin, Microsoft.mshtml öğesini seçin. Listede görünmüyorsa (bu bir PIA'dur), sonra Gözat sekmesini kullanın ve c: \ windows \ system32 \ mshtml.tlb'yi seçin.

Kaynak kod dosyasının en üstünde bir kullanım yönergesi ekleyin:

using mshtml; 

Bir dağıtım detayına sahip olduğunuzdan emin olun. PIA, hedef makinede yüklü değilse, bu mümkün değildir, o zaman yapılacak en iyi şey, derleme referansının Yerel Kopyala özelliğini True olarak ayarlamaktır. Bu, build klasöründe Microsoft.mshtml.dll dosyasını oluşturur. EXE ile birlikte hedef makineye kopyalayın. PIA'nın gerekli olduğu birkaç durum var, buna değil. Bu eski görevine


Update, .NET 4+ ve VS2010 + şimdi "Yerleştir Interop'un Türleri" referans montaj özelliğini desteklemez. "No PIA" özelliği olarak da bilinir. Bu, PIA'lara olan ihtiyacı ortadan kaldırır ve birlikte çalışmaların üstesinden gelmenin en iyi yoludur. Proje, VS'nin eski bir sürümünde başlamadıkça, otomatik olarak Doğru olarak ayarlanmıştır.

Aşağı tarafı yoktur, artık birlikte çalışma derlemesini dağıtmanız gerekmez ve kullandığınız birlikte çalışma türleri artık yürütülebilir dosyanıza gömülür. Sadece kullandıkları. Kodunuzda küçük bir değişiklik gerekli olabilir, new XxxxClass() ile COM nesnesini oluşturursanız, adın "Sınıf" bölümünü kaldırmanız gerekir.

+0

Ah! evet çok başlangıç, mshtml.dll eklemeye çalışıyordum ve hata açılır penceresi açıldı. Bilmem gerektiğini bilmiyordum. –

2

IHTMLScriptElement, Mshtml'de tanımlanmıştır. Microsoft HTML Nesne Kitaplığı'na bir başvuru eklemeniz ve sonra IHTMLScriptElement öğesini çözümlemek için VS için "mshtml kullanarak" eklemeniz gerekir.

1

Bu Mshtml.dll dosyasındadır. System.Windows.Forms.HtmlElement 'ın DomElement mülkiyet

tipi nesnesinin olduğunu, ama aslında mshtml.IHTMLScriptElement olarak, HTML öğesi arayüzleri birine böyle yayınlayabileceğim öğesi için bir COM ıunknown işaretçisi.

2

Bu answer ürününü, PIA benzeri mshtml bileşenlerini dağıtma gerektirmeyen javascript için yönetilebilir bir çözüm için öneririm.