2009-06-12 4 views
7

У меня есть dandy времени, когда Silverlight и JavaScript общаются друг с другом.Связь с Silverlight и JavaScript

В файле page.xaml.cs я отметил класс как ScriptableType и двумя методами с ScriptableMember. Я тогда заявил:

HtmlPage.RegisterScriptableObject("Page", this); 

При попытке вызвать любой метод, я получаю obj.Content.Page неопределен:

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

С другой стороны, внутри метода в Page.xaml. CS, я звоню:

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

у меня есть соответствующий метод в JavaScript, который никогда не вызывается:

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

Silverlight, объект объявлен следующим образом:

<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> 

UserControl определен в XAML как:

<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

Ну, видимо, это работает в IE7, а не в Firefox 3.0.5. Я думал, что мы прошли через браузерные войны с Silverlight? – 2009-06-12 05:14:04

+0

Вы видите ошибку в консоли javascript? – russau

+0

Нет, ошибок в консоли ошибок нет. – 2009-06-12 05:23:17

ответ

0

Если вы нашли несовместимость между FireFox и IE, мы должны сообщить об этом , Может быть что-то еще в JS на странице, или это может быть настройка в FF3 (например, материал типа flashblock)

1

У меня возникла эта проблема. Firefox - это мой браузер по умолчанию и, следовательно, браузер, который запускает Visual Studio (фактически VWD, но неважно). Во время разработки я добавил код вызова JavaScript на страницу клиента и обнаружил, что дочерний элемент «контент» компонента Silverlight не найден в DOM в FireFox, но его можно найти в IE. Я перезапустил веб-серверы Visual Studio (те, что были в системном трее), и, эй, престо - он работал в Firefox! Кажется, что проблема вызвана кэшированием компонента Silverlight на этих веб-серверах.

+2

Я использую панель инструментов веб-разработчиков, чтобы отключить кеш в Firefox при работе над проектами silverlight. У меня всегда проблемы с кэшированием. – ChadT

0

Несколько дней назад я прочитал журнал архива php, и есть статья о Silverlight, которая объясняет, как общаться с javascript, вы можете проверить это.

Перейдите на страницу http://www.phparch.com и зарегистрируйтесь, чтобы вы могли скачать журнал, тогда вы должны скачать майскую версию 2009 года, все остальные вопросы должны быть оплачены, но эта в моем аккаунте была бесплатной, я надеюсь, что и в вашем случае, t скачайте его, просто дайте мне знать, и я могу отправить вам PDF по электронной почте.

А вот прямая ссылка на его загрузки: https://store-phpa.phparch.com/c/phpa/magazine/pickup/97

С наилучшими пожеланиями, Александр

1

Убедитесь, чтобы включить HTML-доступ:

в C#:

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

     bool enableAcces = settings.EnableHTMLAccess; 
     enableAcces = true; 

в HTML:

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

Это сработало для меня.

Смежные вопросы