Silverlight и JavaScript Связь - PullRequest
7 голосов
/ 12 июня 2009

Мне очень приятно, когда 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">

Ответы [ 4 ]

1 голос
/ 13 января 2010

Не забудьте включить доступ 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" />

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

1 голос
/ 27 июля 2009

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

0 голосов
/ 01 августа 2009

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

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

А вот прямая ссылка для скачивания: https://store -phpa.phparch.com / с / PHPA / журнал / пикап / 97

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

0 голосов
/ 12 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...