2012-08-13 19 views
7

Ich versuche ein BHO für die Release-Vorschau von IE 10 zu entwickeln. Das BHO muss in der Lage sein, JavaScript eine C# -Funktion aufrufen zu lassen.C# -BHO-Methoden aus Javascript aufrufen In Internet Explorer 10 (Release-Vorschau)

ich den Anweisungen hier, befolgt haben:

Calling C# BHO methods from Javascript

Diese Anleitung 9.

Leider fand ich in IE Arbeit groß, dass sie nur für die erste Registerkarte in erstellt arbeiten IE 10. Auf der zweiten und den folgenden Registerkarten wird die BHO-Schnittstelle nicht für Javascript verfügbar gemacht. Gelegentlich funktionieren neue Tabs, meistens jedoch nicht. Außerdem versagt es still. Ich nehme an, das hat etwas mit dem Prozessmodell zu tun - aber es funktioniert auch in IE 9 (welches das gleiche Prozessmodell hat).

Hier wird der spezifische Code-Snippet, das ich verwende:

private void InstallJSObject(IHTMLWindow2 window) 
{ 
    // Install our javascript object 
    IExpando windowEx = (IExpando)window; 

    PropertyInfo property = windowEx.GetProperty("myBHO", System.Reflection.BindingFlags.IgnoreCase); 
    if (property == null) 
    { 
     property = windowEx.AddProperty("myBHO"); 
    } 
    property.SetValue(windowEx, this, null); 
} 

Vor der Veröffentlichung erforschte ich folgendes: http://bit.ly/R9qldf

+1

suchen Sie könnten dies wollen Post auf [Microsoft Connect] (http://connect.microsoft .com), da es eher wie ein Bug für den Release Candidate (der immer noch Pre-Release-Software ist) erscheint, anstatt etwas, das für die Veröffentlichung gesichert wurde. Dies könnte sehr wohl "zu lokal" sein. – casperOne

+1

Ich sehe das gleiche Problem mit der veröffentlichten Version von IE10. Dieses Problem existiert noch. –

+0

Nun, wie rufen Sie InstallObject? Wenn Sie diesem Artikel folgen: http://www.codeproject.com/Articles/19971/How-to-attach-to-Browser-Helper-Object-BHO-with-C Wie oft erhalten Sie SetSite aufgerufen? Es sollte einmal pro Browser aufgerufen werden. Denken Sie auch daran, dass jede Registerkarte ein anderer Prozess ist. Wenn Sie den Debugger nur zur Überprüfung verwenden, müssen Sie ihn an jeden Prozess anhängen. –

Antwort

0
var myATL = new ActiveXObject("MySampleATL.MyClass"); 

if (myATL.IsBHOInstalled) 
     alert (myATL. SayHelloFromBHO()); 

else 
     alert ("BHO isn't installed now !"); 

window.external.AddFavorite(<url>, "text"); 

Extrahiert aus here.

Der das Blog April'07 datiert zurück, kann nach wie vor, das sein ist, was Sie für ..