• Silverlight 浏览器交互


    迁移时代码部分样式没了,具体见http://blog.csdn.net/ssll7759/article/details/7362405

    通过System.Windows.Browser命名空间下的HtmlPage,HtmlDocument,HtmlElement,HtmlWindow操作浏览器对象 

    (1)  HtmlDocument的属性简介

            Body:Html的Body对象

            Cookies:Cookie字符串

            DocumentElement:

            DocumentUri:Silverlight宿主的html地址

           QueryString:页面的查询字符串参数

    (2)   HtmlPage的属性简介

            可以使用HtmlPage对象取得对应的HtmlDocument和HtmlWindow对象使用

    (3)   HtmlWindow的属性简介

           相当于JavaScript中的Window对象,

    (4)   操作Cookie

           设置Cookie可以使用

           HtmlPage.Document.SetProperty(“cookie”,cookieValue);

           取得Cookie 使用

           HtmlPage.Document.Cookies;即取得了保存在Cookie中的字符串。

           编写删除Cookie的操作,只要设置Cookie过期时间即可。

    (5)   Url和Html的编码问题

          Silverlight中提供一个HttpUtility方法,里面有对应的HtmlEncode、HtmlDecode、UrlEncode和UrlDecode方法。

          HtmlEncode:将文本字符串进行Html编码

          HtmlDecode:将Http传递的html编码字符串转换成文本字符串

          UrlEncode:将文本字符串转换成Url编码字符串

          UrlDecode:将Url编码字符串转换成文本字符串

    (6)    取得浏览器信息

          取得HtmlPage.BrowserInformation对象的相关属性,即可取得相应的浏览器的信息

    修改DOM:

        HtmlPage.Document.GetElementById("testSpan").SetAttribute("innerText", DateTime.Now.ToString());

    托管代码调用JavaScript

    使用Alert和Confirm方法

    bool rst=  HmtlPage.Window.Confirm("确定点击吗?");

    GetProperty和CreateInstance方法:

    js中的定义:

    function Testfunc(a, b) 
            {
               this.a=a;
               this.b=b;
               alert(a+b);
           }
           Testfunc.prototype =
           {
               SayHello: function () {
                   alert("hello:" + this.a + this.b);
               }
           }  

    2种调用方法

     ScriptObject myScript = HtmlPage.Window.GetProperty("Testfunc") as ScriptObject;
     myScript.InvokeSelf(textBox1.Text, textBox2.Text);
     ScriptObject myScript = HtmlPage.Window.CreateInstance("Testfunc", textBox1.Text, textBox2.Text);
     myScript.Invoke("SayHello");

    Eval方法:

    HtmlPage.Window.Eval("alert('evalHello"+textBox1.Text+"')");

    调用JavaScript中的JSON对象:

    var person =[ {
            Name:"name1",
            Sex: "1"
             },
            {
                 Name: "name2",
                 Sex: "2"
             }]
     ScriptObject obj = HtmlPage.Window.GetProperty("Person") as ScriptObject;
           Person[] person = obj.ConvertTo<Person[]>();
           textBox1.Text = person[1].Name;

    使用JavaScript调用托管代码

     使用RegisterScriptableObject方法

       public MainPage()
            {
                InitializeComponent();
                HtmlPage.RegisterScriptableObject("Calculator", this);
            }
            [ScriptableMember]
            public double Add(double a, double b)
            {
                return a + b;
            }
         function Button1_onclick() {
               var slPlugin = document.getElementById("MySL");
               alert(slPlugin.content.Calculator.Add("2", "3"));
    }

    使用RegisterCreateableType方法

    [ScriptableType]
        public class Calculator
        {
            [ScriptableMember]
            public double Add(double a, double b)
            {
                return a + b;
            }
        }

    HtmlPage.RegisterCreateableType("calculator", typeof(Calculator));

     function Button1_onclick() {
               var slPlugin = document.getElementById("MySL");
               var cal = slPlugin.content.services.createObject("calculator");
               alert(cal.Add("2", "200"));
           }


    使用托管代码处理DOM元素事件

         HtmlPage.Document.GetElementById("id").AttachEvent("onclick",Onclick)

     使用Javascript处理托管事件

      public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
            }
    
            MyCellObject myobject;
            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                myobject = new MyCellObject(); 
                HtmlPage.RegisterScriptableObject("myobject", myobject);
            }
            private void button4_Click(object sender, RoutedEventArgs e) 
            { 
                myobject.FireCellsHandle(new Cell[] 
                {
                    new Cell { Key = "Key1", Value = "Value1" },
                    new Cell { Key = "Key2", Value = "Value2" }
                }); 
            }
        }
    
    
        [ScriptableType]
        public class Cell
        {
            [ScriptableMember]
            public String Key { get; set; }
            [ScriptableMember]
            public String Value { get; set; }
        }
        [ScriptableType]
        public class
        CellsEventArgs : EventArgs
        {
            [ScriptableMember]
            public Cell[] Cells { get; set; }
        }
        [ScriptableType]
        public class MyCellObject
        {
            public void FireCellsHandle(Cell[] cells)
            {
                if (CellsHandle != null)
                {
                    CellsHandle(this, new CellsEventArgs { Cells = cells });
                }
                else
                {
                    HtmlPage.Window.Alert("无js处理事件");
                }
            }
            [ScriptableMember]
            public event EventHandler<CellsEventArgs> CellsHandle;
        } 

    function Button1_onclick() { document.getElementById("MySL").content.myobject.CellsHandle = function (sender, args) { alert(sender.toString()); alert(args.Cells[1].Key); } }

    通过InitParams传递参数
     
    在Silverlight参数中加<param name="initparams" value="MyParam0=test,MyParam1=222 " />

     读取方法:

        在App.xaml中

        private void Application_Startup(object sender, StartupEventArgs e)
             {
                this.RootVisual = new MainPage(e);
             }

        在MainPage中

       public MainPage(StartupEventArgs e)
       {
          InitializeComponent();
          string param ;
          bool exist= e.InitParams.TryGetValue("MyParam1", out param);
          if (exist)
             HtmlPage.Window.Alert(param);
          else
             HtmlPage.Window.Alert("MyParam1不存在");
      }


     

  • 相关阅读:
    Elasticsearch 客户端TransportClient vs RestClient
    MySQL(三)——MySQL45题
    MySQL(二)——其他基础功能
    MySQL(一)——CRUD语句
    JVM(十)——类的加载与加载器
    JVM(九)——字节码指令集
    每日总结
    《构建之法》读后感(三)
    《构建之法》读后感(二)
    《构建之法》读后感(一)
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2580002.html
Copyright © 2020-2023  润新知