Makale numarası: 317024 - Son Gözden Geçirme: 03 Ocak 2005 Pazartesi - Gözden geçirme: 3.0

WebBrowser Host çalıştırılabilir yöntemine komut dosyası hata bildirimi gönderilir

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Visual C++ ile bir <a0>WebBrowser</a0> denetimi ana yazdığınızda, komut dosyası hata bildirimini oluşturmak için aşağıdaki Microsoft Knowledge Base makalesinde bilgileri kullanabilirsiniz:
261003  (http://support.microsoft.com/kb/261003/ ) WebBrowser denetimi ana bilgisayar olarak komut dosyası hatalarında nasıl
Ancak, bu bildirimi tutarsız olabilir: ana bilgisayar hem ınternet Explorer 5.5 ve ınternet Explorer 6.0, bazı yüklemeler ancak başkalarının bildirim alabilirsiniz. Veya, ınternet Explorer 5.5 ile Microsoft Windows platformlarında, ilk bildirim almayabilirsiniz henüz tüm sonraki bildirimleri, düzgün Exec yöntemine ça?r? tetikler.

Neden

Bu davranış, ınternet Explorer 6.0 içindeki tasarım gereğidir. Komut dizisi hata ayıklamasını devreden çıkar onay kutusu temizlenirse, OLECMDID_SHOWSCRIPTERROR komut KIMLIĞI başlatılmıyor (Araçlar menüsünde Internet seçenekleri ' ni tıklatın ve sonra Gelişmiş ' i tıklatın). Bir ınternet Explorer 5.5'de, ınternet Explorer 6. 0'da giderilmiştir hata davranıştır.

Bu sorun hakkında ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
263100  (http://support.microsoft.com/kb/263100/ ) OL2000: Internet tarayıcınızı daha yeni bir örneğini köprü açılmıyor

Çözüm

Bu, Komut dizisi hata ayıklamasını devreden çıkar onay kutusunun arkasında kayıt defteri ayarı program aracılığıyla yeniden yapılandırabilirsiniz; ancak ınternet Explorer ve diğer tüm WebBrowser ana bilgisayarda, yalnızca WebBrowser ana davranışını etkiler. Neyse ki, iletinin OLECMDID_SHOWSCRIPTERROR yapılandırma, ne olursa olsun, her bilgisayarda bir <a0>komut dosyası tabanlı onerror</a0> olay işleyicisi geçerli belgeye injecting tarafından çalıştığını garanti edilmektedir. Bu ana bilgisayarın DWebBrowser2::DocumentComplete() olay işleyicisinden yapılabilir.

Microsoft Foundation Classes (MFC) hem de Active Template Library (ATL) olaylarını batar hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
247073  (http://support.microsoft.com/kb/247073/ ) CustWBC.exe: ATL HTML denetimi WebBrowser denetimi özelleştirir.
Olaylar için ınternet Explorer MFC uygulamadan batar gösteren bir örnek uygulama için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/browser/MFCIEEvtSpy/default.asp (http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/samples/internet/browser/MFCIEEvtSpy/default.asp)
Aşağıdaki örnek kodu MFC iletişim kutusunu uygulaması için yazılmıştır; gövdesi kesebilir ve ATL veya MFC ana bilgisayar ile birlikte makrolar, yapıştırılan:
#define CHECK_HR(hr,label) \ 
if(FAILED(hr)) \ 
{	goto label; \ 
}

#define RRELEASE(ptr) \ 
if(ptr) \ 
{	ptr->Release(); \ 
	ptr = NULL; \ 
}

// Get the DOM associated with the WebBrowser that threw this event, and
// inject an onerror tag into the page in hopes of receiving an 
// OLECMDID_SHOWSCRIPTERROR message. (This is a bug in Internet Explorer 6.)
// NOTE: pBrowser is the IWebBrowser2 for the FRAME, IFRAME, or primary 
// that just finished loading our document. If you have a FRAMESET with 
// three FRAMEs, you will see this handler called four times: once for 
// each FRAME and once for the FRAMESET after all FRAMEs have loaded. 
// We're sinking each individual FRAME in this sample; to sink only the 
// topmost FRAME, test the IUnknown of our m_pBrowser against the IUnknown 
// of this method's pBrowser, and sink only when these two are equal. 
void CSimpleBrowserDlg::OnDocumentComplete(LPDISPATCH pBrowser, LPVARIANT url) 
{
	IWebBrowser2 *thisBrowser		= NULL;
	IDispatch *docDisp			= NULL;
	IHTMLDocument3 *doc		= NULL;
	IHTMLElement *elem			= NULL;
	HRESULT hr = S_OK;

	hr = pBrowser->QueryInterface(IID_IWebBrowser2, reinterpret_cast<void **>(&thisBrowser));
	CHECK_HR(hr, cleanup);
	hr = thisBrowser->get_Document(&docDisp);
	CHECK_HR(hr, cleanup);
	hr = docDisp->QueryInterface(IID_IHTMLDocument3, reinterpret_cast<void**>(&doc));
	CHECK_HR(hr, cleanup);
	RRELEASE(docDisp);

	// Get the documentElement for the document object, and then call 
	// IHTMLElement::insertAdjacentHTML() to add the onerror SCRIPT 
	// handler tag.
	hr = doc->get_documentElement(&elem);
	CHECK_HR(hr, cleanup);
	// NOTE: The &nbsp, or some other visible HTML, is required. Internet Explorer will not
	// parse and recognize the script block without some visual HTML to
	// accompany it.
	hr = elem->insertAdjacentHTML(L"afterBegin", L"&#xa0;<SCRIPT For='window' Event='onerror'>var noOp = null;</SCRIPT>");

	// Cleanup.
cleanup:
	RRELEASE(elem);
	RRELEASE(thisBrowser);
	RRELEASE(doc);
}
				

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Sorunu Yeniden Oluşturma Adımları

  1. Bir <a0>WebBrowser</a0> denetimi ana ATL veya MFC uygulamasında oluşturun.
  2. Bilgi Bankası makalesi Q263100 (Bu makalenin "Neden" bölümünde bağlı) ana bilgisayarınızda IOleCommandTarget arabirimi uygulamak için kullanın. MFC kullanıcılar da ipuçları için aşağıdaki Microsoft Knowledge Base makalesine başvurun isteyebilirsiniz:
    141277  (http://support.microsoft.com/kb/141277/ ) Nasıl yapılır: bir arabirim MFC uygulamada geçersiz kılar.
  3. Kesme noktası OLECMDID_SHOWSCRIPTERROR komut KODUNU yakalar Exec yönteminizi bölümü içinde yerleştirin.
  4. Aşağıdaki HTML dosyasını yerel ana bilgisayarınızda köke Web sunucusu testError.htm kaydedin:
    <HTML>
    
    <SCRIPT>
    
    function load() {
    	/// obj1 is undefined, so this will produce a scripting error.
    	obj1.callMethod();
    }
    
    </SCRIPT>
    
    <BODY onload="load();">
    
    
    
    </BODY>
    
    </HTML>
    					
  5. Daha önce yapmadıysanız, ınternet Explorer'ı başlatın, Araçlar menüsünden Internet seçenekleri ' ni tıklatın, Gelişmiş ' i tıklatın ve sonra <a0>Gözatma</a0> kategorisinde Komut dizisi hata ayıklamasını devreden çıkar onay kutusunu temizlemek için tıklatın.
  6. WebBrowser ile ilgili ana bilgisayar'ı başlatın ve sonra aşağıdaki Web sitesine gidin:
    http://localhost/testError.htm
    Yürütülen çalıştırılabilir uygulamanız için OLECMDID_SHOWSCRIPTERROR yanıt kod bloğunu hiçbir zaman unutmayın.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Internet Explorer 5.5
  • Microsoft Internet Explorer (Programming) 6.0
Anahtar Kelimeler: 
kbmt kbnofix kbprb KB317024 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:317024  (http://support.microsoft.com/kb/317024/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.