Ich stelle einen benutzerdefinierten Namespace und binäres Verhalten für ein .net WebBrowser-Steuerelement bereit, und es funktioniert unter bestimmten Umständen problemlos. Verwendung des folgenden Codes, die Haltepunkte (gekennzeichnet mit ●
) alle Treffer und mein Namespace richtig komplett mit dem Verhalten implementiert:IServiceProvider IElementBehaviorFactory wird nicht abgefragt, bis ein unbehandelter JavaScript-Fehler ausgelöst wird
int IServiceProvider.QueryService(ref Guid guidService, ref Guid riid, out IntPtr ppvObject)
{
int hr = Native.E_NOINTERFACE;
ppvObject = IntPtr.Zero;
if (riid == IidClsid.IID_IElementBehaviorFactory)
{
// Returning S_OK tells the html host to query for our IHostBehaviorInit.
● hr = Native.S_OK;
}
else if (riid == IidClsid.IID_IHostBehaviorInit)
{
ppvObject = Marshal.GetComInterfaceForObject(this, typeof(IHostBehaviorInit));
● hr = Native.S_OK;
}
else if (guidService == IidClsid.IID_IInternetSecurityManager)
{
ppvObject = Marshal.GetComInterfaceForObject(this, typeof(IInternetSecurityManager));
● hr = Native.S_OK;
}
return hr;
}
jedoch die erste und die zweite Haltepunkt nur wegen eines Skriptfehler in der Testseite . Wenn ich den Fehler behebe oder Fehler unterdrücke, treffen die Breakpoints niemals. Zum Beispiel verhindert, dass der folgende Code meines Namensraum und Verhalten von je registriert werden:
WebBrowser.Document.Window.Error += OnWebBrowserDocumentWindowError;
public void OnWebBrowserDocumentWindowError (object sender, IHTMLEventObj e)
{
e.Handled = true;
}
Dies ist, was die MSDN documentation for IHostBehaviorInit sagt:
MSHTML ruft die
IServiceProvider::QueryService
der Hostanwendung um dieIElementBehaviorFactory
Schnittstelle anzufordern, und fordert den Host für dieIHostBehaviorInit
Schnittstelle. Wenn die SchnittstelleIHostBehaviorInit
verfügbar ist, ruft MSHTML dieIHostBehaviorInit::PopulateNamespaceTable
-Methode auf. Die Hostanwendung kann dann MSHTML für die SchnittstelleIElementNamespaceTable
abfragen und die MethodeIElementNamespaceTable::AddNamespace
verwenden, um zusätzliche Namespaces an die Namespacetabelle anzufügen.
Ich habe bemerkt, dass, wenn ich auf einem <select>
klicken Sie auf den Dropdown-Liste zu öffnen, die ersten und zweiten Haltepunkte ganz plötzlich treffen. Es ist wirklich komisches Verhalten, kann mir jemand helfen, das herauszufinden?
Was ist die IE-Version und was ist der Wert von 'FEATURE_BROWSER_EMULATION', falls vorhanden? Haben Sie versucht, 'FEATURE_BEHAVIORS' zu deaktivieren (auf '0' setzen)? – Noseratio
@Noseratio: IE-Version ist 10, aber der Dokumentmodus ist IE 7. 'FEATURE_BROWSER_EMULATION' ist für diese Anwendung (aus Kompatibilitätsgründen) auf' 7000' gesetzt. 'FEATURE_BEHAVIORS' ist auf' 1' (Standard) eingestellt, aber das Ändern in '0' macht keinen Unterschied. –
Andy, Sie möchten dies möglicherweise als Fehler an Microsoft melden, obwohl es wahrscheinlich nicht behoben wird. Sie ignorieren Binärverhalten seit IE10, die Unterstützung dafür ist in IE11 noch schlimmer. – Noseratio