2011-01-06 1 views
6

VS2010, Silverlight 4.0.Добавить javascript в сгенерированную страницу html test для проекта Silverlight

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

ответ

1

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

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

<!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: Silverlight

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.
Я надеюсь, что мои примеры помогут вам =)

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