2009-06-12 17 views
7

Silverlight ve JavaScript'in birbiriyle iletişim kurmasını sağlayan bir zaman geçiriyorum. page.xaml.cs dosyasında Silverlight ve JavaScript İletişimi

, ben ScriptableType ve ile iki yöntem ScriptableMember olarak sınıf işaretlenmiş. Sonra ilan:
HtmlPage.RegisterScriptableObject("Page", this); 

Ben iki yöntemi çağırma girişiminde

, ben obj.Content.Page tanımlanmamış olsun:

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()); 

Kapak tarafında, page.xaml bir yöntemin iç. cs, seni arıyorum:

function mapRegionChanged(region) { 
    alert("Region changed: " + region); 
} 
01:
HtmlPage.Window.Invoke("mapRegionChanged", GetRegion()); 

aradım geçmez JavaScript ilgili bir yöntem var aşağıdaki gibi

Silverlight nesnesi ilan edilir:

UserControl olarak XAML tanımlanır
<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> 

: Eğer FireFox ve IE arasında bazı uyumsuzluk bulduysanız

<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

Görünüşe göre IE7'de çalışıyor, Firefox 3.0.5'te değil. Silverlight'la tarayıcı savaşlarını geçtiğimizi sanıyordum? –

+0

Javascript konsolunda bir hata görüyor musunuz? – russau

+0

Hayır, Hata Konsolunda hata yok. –

cevap

0

, bunu bildirmeniz gerekir . Bu sayfadaki JS'de başka bir şey olabilir ya da FF3'te (flashblock tipi şeyler gibi)

1

Bu sorunu yaşadım. Firefox benim varsayılan tarayıcım ve bu nedenle Visual Studio'nun (aslında VWD, ama önemli değil) başlattığı tarayıcıdır. Gelişirken, JavaScript çağrı kodunu istemci sayfasına ekledim ve Silverlight bileşeninin "content" alt öğesi üyesinin FireFox'ta DOM'da bulunamadığını tespit ettim - ancak IE'de bulunabilir. Visual Studio web sunucularını (sistem tepsisinde olanlar) yeniden başlattım ve hey, önceden - Firefox'ta çalıştı! Sorun, bu web sunucularındaki Silverlight bileşeninin önbelleğe alınmasından kaynaklanmış gibi görünüyor.

+2

Web Developer Toolbar'ı önbelleği devre dışı bırakmak için kullanıyorum Silverlight projeleri üzerinde çalışırken Firefox'ta. Aksi takdirde önbelleğe alma ile ilgili sorunlarım var. – ChadT

0

Bazı günler önce php mimar dergisini okudum ve Silverlight hakkında javascript ile nasıl iletişim kuracağınızı açıklayan bir makale var, kontrol etmek isteyebilirsiniz.

http://www.phparch.com'a gidin ve kayıt olun, böylece dergiyi indirebilir, daha sonra Mayıs 2009 sayısını indirmeniz gerekir, diğer tüm sorunlar ödenmelidir, ancak bu hesabımda ücretsizdir, umarım sizde de olur Sadece indirmeme izin verin ve size e-posta ile PDF gönderebilirim.

Ve burada indirmek için doğrudan link: Alexandru

1

https://store-phpa.phparch.com/c/phpa/magazine/pickup/97

Saygılarımızla, Make HTML acces etkinleştirmek için emin:

C#:

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

     bool enableAcces = settings.EnableHTMLAccess; 
     enableAcces = true; 

HTML'de:

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

Bu benim için çalıştı.