2009-06-12 16 views
7

Estoy teniendo un tiempo excelente para obtener Silverlight y JavaScript para comunicarse entre ellos.Silverlight y comunicación de JavaScript

En el archivo page.xaml.cs, que marcó la clase como ScriptableType y dos métodos con ScriptableMember. a continuación, declaré:

HtmlPage.RegisterScriptableObject("Page", this); 

Cuando intento para invocar cualquier método, llego obj.Content.Page no está definido:

var obj = document.getElementById('silverlightControl'); 
alert(obj);    // [object HtmlObjectElement] 
alert(obj.Content);  // Content 
alert(obj.Content.Page); // obj.Content.Page is undefined 
alert(obj.Content.Page.GetRegion()); 

Por otro lado, en el interior de un método en el Page.xaml. cs, llamo:

HtmlPage.Window.Invoke("mapRegionChanged", GetRegion()); 

que tienen un método correspondiente en JavaScript, que nunca se llama:

function mapRegionChanged(region) { 
    alert("Region changed: " + region); 
} 

El objeto de Silverlight se declara como sigue:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" 
    width="151px" height="77px" id="silverlightControl"> 
    <param name="onload" value="regionsLoaded" /> 
    <param name="source" value="<%= Url.Content("~/ClientBin/Worldmap.xap") %>" /> 
    <param name="onerror" value="onSilverlightError" /> 
    <param name="background" value="white" /> 
    <param name="minRuntimeVersion" value="2.0.31005.0" /> 
    <param name="autoUpgrade" value="true" /> 
    <param name="enableHtmlAccess" value="true" /> 
    <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> 
     <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /> 
    </a> 
</object> 

El control de usuario se define en XAML como:

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="Worldmap.Page" 
Width="151" Height="77" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> 
<Grid x:Name="LayoutRoot" Background="White" Width="151" Height="77" Cursor="Hand" MouseMove="OnMouseMove" MouseLeftButtonUp="OnMouseUp" MouseLeave="OnMouseLeave"> 
+0

Bueno, aparentemente funciona en IE7, pero no en Firefox 3.0.5. Pensé que ya habíamos pasado las guerras de los navegadores con Silverlight. –

+0

¿Ve un error en la consola de JavaScript? – russau

+0

No, no hay errores en la consola de errores. –

Respuesta

0

Si encuentra alguna incompatibilidad entre Firefox e IE, tendremos que denunciarlo . Puede ser otra cosa en el JS en la página, o podría ser un ajuste en FF3 (como cosas de tipo flashblock)

1

Tuve este problema. Firefox es mi navegador predeterminado y, por lo tanto, es el navegador que Visual Studio (en realidad VWD, pero no importa) se inicia. Mientras desarrollaba, agregué el código de llamada JavaScript a la página del cliente y encontré que el miembro secundario "contenido" del componente Silverlight no se podía encontrar en DOM en Firefox, pero se podía encontrar en IE. Reinicié los servidores web de Visual Studio (los que están en la bandeja del sistema) y ¡listo !, ¡funcionó en Firefox! El problema parece haber sido causado por el almacenamiento en caché del componente Silverlight en esos servidores web.

+2

Utilizo la barra de herramientas Web Developer para desactivar el caché en Firefox cuando se trabaja en proyectos Silverlight. Siempre tengo problemas con el almacenamiento en caché de lo contrario. – ChadT

0

Hace algunos días que leí la revista php architect y hay un artículo sobre Silverlight que explica cómo comunicarse con javascript, es posible que desee verificarlo.

Vaya a http://www.phparch.com y regístrese para descargar la revista, luego debe descargar la edición de mayo de 2009, todas las demás cuestiones se deben pagar, pero esta en mi cuenta es gratuita, espero que en la suya también, si puede ' t descárgamelo solo házmelo saber y puedo enviarte el PDF por correo electrónico.

Y aquí está el enlace directo para descargarlo: https://store-phpa.phparch.com/c/phpa/magazine/pickup/97

Saludos, Alexandru

1

Asegúrese de habilitar acceso HTML:

en C#:

 System.Windows.Interop.SilverlightHost host = Application.Current.Host; 
     System.Windows.Interop.Settings settings = host.Settings; 

     bool enableAcces = settings.EnableHTMLAccess; 
     enableAcces = true; 

en HTML:

<param name="enablehtmlaccess" value="true" /> 

Esto funcionó para mí.

Cuestiones relacionadas