Добавьте JavaScript к сгенерированной html тестовой странице для проекта Silverlight - PullRequest
6 голосов
/ 06 января 2011

VS2010, Silverlight 4.0.

Кто-нибудь знает, есть ли способ заставить Visual Studio добавить javascript (или что-то в этом роде) на тестовую страницу html, которую он создает при компиляции проекта silverlight для отладки? Использует ли он шаблон, и если да, то где он?

1 Ответ

1 голос
/ 07 января 2011

Действительно интересный вопрос!
Я попытался сделать что-то подобное и, наконец, нашел сырое, но довольно работающее решение:

Прежде всего, вы должны установить определенную страницу, используя Свойства -> Отладка -> Определенная страница. Пример моей страницы:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

<head>
    <title>SilverlightApplication1</title>
    <script type="text/javascript"> 
    </script>
</head>

<body>
    <div id="fillWithData">
    </div>
    <form id="form1" runat="server" style="height:100%">
    <div id="silverlightControlHost" style="height: 100%; text-align:center">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="30%" height="30%">
          <param name="source" value="file:///C:/Users/Igor/Documents/Visual Studio 2010/Projects/MobileTest/SilverlightApplication1/Bin/Debug/SilverlightApplication1.xap"/>
          <param name="onError" value="onSilverlightError" />
          <param name="background" value="white" />
          <param name="minRuntimeVersion" value="4.0.50826.0" />
          <param name="autoUpgrade" value="true" />
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
              <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
          </a>
        </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
    </form>
</body>
</html>

ПРИМЕЧАНИЕ: пустой скрипт и элементы div важны! мы загрузим в них динамический js / html.

Мой серебряный свет xaml.cs:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        HtmlDocument hostPage = HtmlPage.Document;

        ScriptObject obj = hostPage.GetElementsByTagName("script")[0];
        obj.SetProperty("innerHTML", "function alertonclick() { alert('Amazing! I am dynamic javascript!'); }");    

        HtmlElement ipAddressHtml = hostPage.GetElementById("fillWithData");
        ipAddressHtml.SetProperty("innerHTML", @"<input id=""Button1"" type=""button"" value=""button"" onclick=""alertonclick();"" />");
    }
}

ОЧЕНЬ ВАЖНОЕ ПРИМЕЧАНИЕ: я тестировал этот код, и он работает только под Opera. Если вам нужно что-то протестировать с помощью другого браузера, вы можете встроить JavaScript непосредственно в элемент.

Пример:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        HtmlDocument hostPage = HtmlPage.Document;

        HtmlElement ipAddressHtml = hostPage.GetElementById("fillWithData");
        ipAddressHtml.SetProperty("innerHTML", @"<input id=""Button1"" type=""button"" value=""button"" onclick=""alert('Amazing! I am dynamic javascript!');"" />");
    }
}

Этот код хорошо работает в IE / FF / Chrome / Opera (конечно :)).
Что касается меня, мне нравится первый пример с динамическими js и html. И я уверен, что это можно исправить и сделать приемлемым для других браузеров, а не только для Opera.
Я надеюсь, что мои примеры помогут вам =)

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