Sunați la codul Silverlight de la Javascript în IE

Am o aplicație Silverlight într-o pagină HTML. Pluginul SL este găzduit într-o etichetă HTML "obiect". Când utilizatorul închide pagina Web, vreau să apelez o funcție în interiorul aplicației mele Silverlight. Codul este ceva de genul:

Codul HTML simplificat:

<div id="silverlightControlHost">
    
        
 ... <iframe id="_sl_historyFrame"></iframe></div>

Codul Javascript:

<script type="text/javascript">
    window.onbeforeunload = confirmExit;

    function confirmExit()
    {
        var control = document.getElementById("MyApp");
        var message = control.content.BrowserIntegration.MyAppFunction();

        if (message)
        {
            return message;
        }
    }
</script>

A lucrat și nu mai funcționează, cel puțin în Internet Explorer 8. Proprietatea de conținut a obiectului HTML (control.content) este nedefinită. Ciudat. A apărut recent o modificare pentru această proprietate? Sunt destul de sigur că a funcționat acum 2 luni și că a funcționat bine mult timp înainte de asta. Site-ul web se află pe site-urile mele de încredere și nu am găsit o setare în IE pe care am schimbat-o de atunci (ar putea fi una sau două, dar, scanând lista, nu am găsit nimic).

Când fac un test cu evenimentul "onLoad" al obiectului HTML, conținutul este deja nedefinit.

Nu știu dacă anomalia este faptul că a funcționat înainte sau că nu funcționează acum. Dar dacă cineva îmi poate spune cum să o fac să funcționeze acum, îmi va face ziua.

0
@ Lucas: Am încercat (înregistrarea codului ghidat pentru accesul la scriptul clientului). Aceasta este ceea ce am făcut pentru a testa evenimentul onLoad al obiectului HTML. Proprietatea de conținut (sau conținut) este nedefinită și în acest caz. Functioneaza pentru tine? Hopa: Tocmai am văzut nota la sfârșitul acelei pagini. Voi verifica asta.
adăugat autor ConnorsFan, sursa
Da, asta am verificat (problemă de domenii încrucișate). Dar nu are nicio importanță. Proprietatea conținutului este încă nedefinită.
adăugat autor ConnorsFan, sursa
Cineva a testat aceeași pagină Web cu IE8 și a obținut rezultatul așteptat: se numește funcția înregistrată în aplicația SL. Ceva este greșit (sau, cel puțin, diferit) de propriul meu sistem. Și acum, am constatat că am alte probleme cu unele script-uri de pe alte pagini Web. Odată ce găsesc cauza acestui comportament, bănuiesc că întrebarea mea inițială nu va fi de interes. :-)
adăugat autor ConnorsFan, sursa
@ Lucas: Ultimul tău comentariu a fost ascuns, tocmai l-am găsit. Am încercat să folosesc cele mai scăzute setări de securitate și le-am personalizat să "permită" totul. Singurul lucru pe care l-a schimbat a fost să-mi iau toate felurile de reamintiri că trăiesc periculos. Dar problema mea era încă acolo. Norton Antivirus a detectat câteva troian Maljava pe sistemul meu și, presupus, le-a eliminat. Nu mai mult succes cu scenariul meu după aceea.
adăugat autor ConnorsFan, sursa
adăugat autor Lukasz M, sursa
Vrei să spui o problemă de apelare pe mai multe domenii Spuneți-ne dacă acest lucru vă ajută.
adăugat autor Lukasz M, sursa
Poate este o problemă cu setările de securitate ale browserului dvs.
adăugat autor Lukasz M, sursa

3 răspunsuri

Aceste operațiuni nu mi-au rezolvat problema:

  • Detectarea și eliminarea virușilor
  • Reducerea nivelului de securitate în IE8
  • Reinstalarea Internet Explorer 8
  • Reinstalarea componentei Silverlight

Asta mi-a rezolvat problema:

  • Reinstalarea runtimei dezvoltatorului Silverlight

Notă: utilizez MS Visual Studio 2010 pentru dezvoltarea .NET

0
adăugat

Creez un expert pentru a apela codul Silverlight de la IE:

1) Trebuie să identificați un control silverlight: adăugați eticheta "id":


2) Aveți nevoie de registru obiect scriptable de la Silverlight cod:

HtmlPage.RegisterScriptableObject("FBSHandler", this);

3) Marca necesită metoda silverlight ca ScriptableMember:

[ScriptableMember]
        public void FBAuthorized(string authKey){}

4) Ar trebui să utilizați obiect scriptable înregistrat pentru a apela metoda Silverlight:

var silverlightCtrlId = '_sl_facebookapp';

function handleStatusResponse(response) {
    var control = document.getElementById(silverlightCtrlId);    
        var accessToken = response.authResponse.accessToken;
        if (control != null) {
            control.Content.FBSHandler.FBAuthorized(accessToken);
        }
    }
}

Funcționează bine. Sper că vă va ajuta.

0
adăugat
Mulțumesc pentru cod. De fapt, asta deja fac. Dar control.Content este nedefinit. Aceasta este problema mea. În acest moment, caut o problemă de virus sau ceva de genul ăsta. Am primit erori de Javascript pe diferite site-uri Web de ieri. Și deoarece codul Silverlight/Javascript funcționează pe alte computere, acesta indică o problemă specifică mașinii mele.
adăugat autor ConnorsFan, sursa

Cred că aceasta este o problemă de sincronizare. Codul dvs. pentru a accesa elementul Conținut poate fi executat înainte ca Componenta Silverlight să fie încărcată în întregime.

Am avut aceeași problemă și am rezolvat-o folosind Timer-ul Javascript până când elementul a fost complet încărcat. Interesant problema a fost doar cu IE și nici unul dintre celelalte browsere.

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com