2011-01-06 9 views

cevap

1

Gerçekten ilginç bir soru!
Böyle bir şey yapmayı denedim ve nihayet ham ama güzel bir çalışma çözümü buldum:

Öncelikle Özellikler -> Hata Ayıklama -> Özel Sayfa'yı kullanarak belirli bir sayfa belirlemelisiniz. Benim sayfa örneği:

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

NOT: Boş komut dosyası ve div öğeleri önemlidir! Dinamik js/html yükleyeceğiz.

Benim Silverlight 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();"" />"); 
    } 
} 

ÇOK ÖNEMLİ NOT: Bu kodu test ettik ve onu Opera altında sadece çalışır. Başka bir tarayıcı kullanarak bir şeyi test etmeniz gerekiyorsa, javascript'i doğrudan öğeye yönlendirebilirsiniz.

Örnek:

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!');"" />"); 
    } 
} 

Bu kod (:) tabii ki) IE/FF/Krom/Opera altında iyi çalışır.
Bana gelince ilk örneği hem dinamik js hem de html ile beğeniyorum. Ve eminim ki bunu düzeltmek ve sadece Opera’nın değil diğer tarayıcılar tarafından da kabul edilebilir.
Umarım örneklerim size yardımcı olur =)

İlgili konular