您的位置:首页 > Web前端 > JavaScript

Silverlight与javascript互调用方法总结

2011-03-17 17:32 417 查看
1. silverlight 中使用javascript

(1) 引用名字空间: using System.Windows.Browser;

(2) 方法1:HtmlPage.Window.Eval() 这个方法直接执行字符串的javascript;

string prompt = "alert(\"";

prompt += ex.Message;

prompt += " \");";

HtmlPage.Window.Eval(prompt);

\\ 其中的ex为异常对象,我经常用来打印异常信息。

方法2:HtmlPage.Window.Invoke("InitializeFso", new object[] { });

其中第一个参数是javascript 的函数名称,第二参数是调用这个函数的参数数组。

earchPath.Text = strNode;

string strPath = "";

try

{

strPath = HtmlPage.Window.Invoke("GetAllDirectory", new string[] { strNode }) as string;

}

catch (System.Exception ex)

{

HtmlPage.Window.Eval("alert(\"Get directory error!\")");

string prompt = "alert(\"";

prompt += ex.Message;

prompt += " \");";

HtmlPage.Window.Eval(prompt);

}

方法3:htmlpage.window.createInstance();

方法4:silverlight中定义事件,同时在承载silverlight的页面上利用javascript注册事件响应

sl中:

public class JSControl

{

public JSControl()

{

System.Windows.Browser.HtmlPage.RegisterScriptableObject("jscontrol", ctrl);

}

[System.Windows.Browser.ScriptableMember]

public event EventHandler CallJs;

public void TriggerCallJs()

{

if (CallJs != null)

CallJs(this, EventArgs.Empty);

}

}

js中: function OnLoaded(sender, args) {

sender.Content.jscontrol.CallJs = calledBySL;

}

function calledBySL(sender, args) {

alert("i'm js, called by silverlight" + args);

}

function createSilverlight() {

Silverlight.createObjectEx({

source: "ClientBin/CensorProtal.xap",

parentElement: document.getElementById("SilverlightControlHost"),

id: "SilverlightControl",

properties: {

width: "100%",

height: "100%",

minRuntimeVersion: "4.0.50401.0",

enableHtmlAccess: "true"

},

events: { onLoad: OnLoaded }

});

另外的例子:

1.首先在silverlight布局界面中增加一个按钮,如下:

  <Button Content="Call javascript" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="callButton" VerticalAlignment="Top" Width="175" Click="callButton_Click" />

  2.在代码文件中增加以下代码,可逐个验证一下4种方法

  private void callButton_Click(object sender, RoutedEventArgs e)

{

//method 1

//ScriptObject script = HtmlPage.Window.GetProperty("HelloWorld") as ScriptObject;

//script.InvokeSelf();

//method 2

//HtmlPage.Window.Alert("Hollo world 2!");

//method 3

//ScriptObject script = HtmlPage.Window.CreateInstance("myHello");

//script.Invoke("ShowAlert");

//method 4

HtmlPage.Window.Eval("a=1+2;alert(a);");

}

  3.在html页面中增加以下javascript代码。

  <script type="text/javascript">

function HelloWorld() {

alert("Hollo world!");

}

myHello = function (message) {

this.Message = message;

};

myHello.prototype.ShowAlert = function () {

alert("Hollo world 3!");

};

</script>

2. JS 调用Silverlight

1. 在Silverlight的UserControl的派生类的构造函数中进行注册Silverlight给js 的运行期。

try

{

HtmlPage.RegisterScriptableObject("Test", this);

}

catch (System.Exception ex)

{

HtmlPage.Window.Eval("alert(\"register Silverlight error!\")");

string prompt = "alert(\"";

prompt += ex.Message;

prompt += " \");";

HtmlPage.Window.Eval(prompt);

}

2. 在Silverlight中建立可以让js 调用的方法:使用关键字[ScriptableMember], 还有[ScriptableType]

例如:[ScriptableMember]

public void QueryResultstring(string strmessage)

{

QueryScanResult Result = new QueryScanResult();

Result.ParserFromString(strmessage);

if (Result.ErrorCode != "0")

{

return;

}

string strShow = "scaning: ";

if (Result.Section == "2")

{

ScanPathShower.Text = strShow + Result.TargetFile;

}

if (Result.Section == "4")

{

ScanPathShower.Text = strShow + "Finished!";

m_bScanButton = false;

}

// Section 0 undefine

// section 1 ready

// section 2 scaning

// section 3 pause

// section 4 completed

// Query again

}

3. 在测试silverlight 的页面增加 silverlight obj 的ID

<object id ="SilverlightControlXXX" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">

<param name="source" value="DubaSilverlightDemo.xap"/>

<param name="onerror" value="onSilverlightError" />

<param name="background" value="white" />

<param name="minRuntimeVersion" value="3.0.40307.0" />

<param name="autoUpgrade" value="true" />

<a href="http://go.microsoft.com/fwlink/?LinkID=141205" mce_href="http://go.microsoft.com/fwlink/?LinkID=141205" style="text-decoration: none;" mce_style="text-decoration: none;">

<img src="http://go.microsoft.com/fwlink/?LinkId=108181" mce_src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" mce_style="border-style: none"/>

</a>

</object>

4. 在Js 中调用

var control = document.getElementById("SilverlightControlxxx");

//alert("OK");

try

{

alert("Call silverlight");

control.Content.Test.QueryVirusstring(KxRes);

}

catch(e)

{

alert("Exception");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: