对于silverlight中调用javascript的问题感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍silverlight插件怎么启用,并为您提供关于.net–使用javascript激活
对于silverlight 中调用javascript的问题感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍silverlight插件怎么启用,并为您提供关于.net – 使用javascript激活silverlight事件、C#-Silverlight中的JavaScript表达式解析器、JavaScript/CSS与Silverlight vs. Flex、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧的有用信息。
本文目录一览:- silverlight 中调用javascript的问题(silverlight插件怎么启用)
- .net – 使用javascript激活silverlight事件
- C#-Silverlight中的JavaScript表达式解析器
- JavaScript/CSS与Silverlight vs. Flex
- Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧
silverlight 中调用javascript的问题(silverlight插件怎么启用)
Silverlight 调用
object obj = System.Windows.browser.HtmlPage.Window.
Eval("GetTypetoSilverlight()");string sType = obj.ToString();
----------------------------------------------------------------------------------------------------------------------------------
javascript 定义
function GetWCFServerToSilverlight() {
return "http://localhost:820";
}
----------------------------------------------------------------------------------------------------------------------------------
当在一台新机器上代码调试时,发现
object obj = System.Windows.browser.HtmlPage.Window.
Eval("GetTypetoSilverlight()");这句总出错,
解决方法,IE设为默认浏览器,并且在IE选项中把禁用javascript脚本的勾去掉
.net – 使用javascript激活silverlight事件
我可以在页面中使用javascript来触发silverlight组件中的事件吗?如果是这样,有没有人有一些代码示例?
解决方法:
是的你可以.您需要使用“ScriptableMember”属性在.NET代码中的类上装饰方法,然后在对象上调用HtmlPage.RegisterScriptableObject以标记它与javascript的互操作性.您将创建一个名为OnMyEvent(sender As Object,e As MyEventArgs)的.NET方法,然后引发您想要的对象事件.然后你的javascript会调用它.
有关演练,请参阅此链接:
http://msdn.microsoft.com/en-us/library/cc221414(VS.95).aspx
C#-Silverlight中的JavaScript表达式解析器
大家好!我有一个Silverlight项目,该项目需要帮助用户创建JavaScript逻辑表达式(例如“ var1!= var2&& var3> = var4”).很简单.问题是我没有太多时间自己创建一个人,因为调整过渡表会浪费一些时间.
因此,我在网上搜索一个,但是发现的只有几个类可以帮助您验证JavaScript,但是我需要一种加载,解析然后写回的方法.所以我想知道是否有人对我的做法有任何想法.我假设它不需要太多代码,也不必是C#示例.如果您能用C甚至伪代码给我一些想法,那将大有帮助.
谢谢,
弗拉基米尔
解决方法:
手动创建递归下降解析器.很有趣!
首先定义一个语法:
Expression -> SimpleExpression ExpressionTail
(Expression)
SimpleExpression -> Atom Inequality Atom
ExpressionTail -> && Expression |
|| Expression |
e
Atom -> Variable | Literal
Inequality -> == | != | > | >= | < | <=
(此语法不处理运算符的优先级,但是很容易编写一个可以满足此要求的语法.)
接下来,创建一个词法分析器,该词法分析器将读取输入字符串并创建标记,以便将字符串“ var1!= 4.0”转换为{Variable,!=,Literal}的列表.可以将它们一起砍掉,或者如果您想花哨的话,可以使用有限状态机来分析字符串.
现在创建一个递归下降解析器,将标记列表解析为一个表达式树.
public class Parser {
public Parser() {
}
public Expression parse( LexicalAnalyzer lex) {
lex.advance();
return expression( lex);
}
private Expression expression( LexicalAnalyzer lex) {
switch( lex.current().type() ) {
case Token.OpenParen:
lex.advance();
Expression expression = expression( lex);
lex.eat( Token.CloseParen);
return expression;
case Token.Literal:
case Token.Variable:
return expressionTail( lex, simpleExpression(lex));
default:
throw new Exception( "ParseError: Expecting (, variable, or literal at character " +
lex.character());
}
}
private SimpleExpression simpleExpression( LexicalAnalyzer lex) {
Atom atom = atom( lex);
switch( lex.current().type() ) {
case Token.Equal:
lex.advance();
return new Equal( atom, atom(lex));
case Token.NotEqual:
lex.advance();
return new NotEqual( atom, atom(lex));
...
default:
throw new Exception( "ParseError: Expecting ==, !=, <, <=, >, >= at" +
lex.character());
}
}
private Expression expressionTail( LexicalAnalyzer lex, SimpleExpression expression) {
switch( lex.current().type() ) {
case Token.LogicalOr:
lex.advance();
return new OrExpression( expression, expression(lex) );
case Token.LogicalAnd:
lex.advance();
return new AndExpression( expression, exptression(lex) );
default:
return expression;
}
}
private Atom atom( LexicalAnalyzer lex) {
switch( lex.current().type() ) {
case Token.Literal:
Literal literal = new Literal( lex.current() );
lex.advance();
return literal;
case Token.Variable:
Variable var = new Variable( lex.current() );
lex.advance();
return var;
default:
throw new Exception("ParseError: ...");
}
}
}
public interface Expression {
boolean evaluate( VariableValues values);
}
public interface SimpleExpression implements Expression {
}
public class Equal implements SimpleExpression {
private final Atom left, right;
public Equal( Atom left, Atom right) {
this.left = left;
this.right = right;
}
public boolean evaluate( VariableValues values) {
return left.evaluate(values) == right.evaluate(values);
}
}
public class NotEqual implements SimpleExpression {
private final Atom left, right;
public NotEqual( Atom left, Atom right) {
this.left = left;
this.right = right;
}
public boolean evaluate( VariableValues values) {
return left.evaluate(values) != right.evaluate(values);
}
}
public class OrExpression implements Expression {
private final Expression left, right;
public OrExpression( Expression left, Expression right) {
this.left = left;
this.right = right;
}
public boolean evaluate( VariableValues values) {
return left.evaluate(values) || right.evaluate(values);
}
}
public class AndExpression implements Expression {
private final Expression left, right;
public AndExpression( Expression left, Expression right) {
this.left = left;
this.right = right;
}
public boolean evaluate( VariableValues values) {
return left.evaluate(values) && right.evaluate(values);
}
}
public interface Atom {
double evaluate( VariableValues values);
}
public class Literal implements Atom {
private final double value;
public Literal( double value) {
this.value = value;
}
public double evaluate( VariableValues values) {
return value;
}
}
public class Variable implements Atom {
private final String name;
public Variable( String name) {
this.name = name;
}
public double evaluate( VariableValues values) {
return values.getValue( name);
}
}
JavaScript/CSS与Silverlight vs. Flex
因此,我们有一些持续的讨论是否应该在Flex或Silverlight中重新编写应用程序的客户端部分,或者使用jQuery等一些最先进的JavaScript框架重新编写,或者我们是否应该继续使用我们的内容已经并逐渐尝试替换现有代码的最差位.更难以决定的是,重新编写UI可能会花费我们6-12个月的时间.
我想听听你对这个问题的看法(也许你们中的一些人已经不得不做出类似的决定).
编辑:回答答案提出的一些问题:后端代码是用C#编写的,目标受众(通常)是我们出售软件的公司的非技术用户(不是一般公众,但并非严格的内部用户),软件“只”必须在桌面浏览器中运行,但不一定在移动设备上运行,客户端应用程序是一个完整的用户界面.
解决方法
通过将其保留在JavaScript中,您可以慢慢地引入一个框架,如果您选择并迭代地执行(替换代码部分,测试它,释放它,并修复任何错误).这将允许您以较慢的速度执行此操作并获得反馈.也就是说,如果项目在中途被取消,那么你并没有完成所有的工作,因为最终用户正在使用更新的代码.记住瀑布模型,这基本上是完全交换的几乎永远不会起作用.
尽管我不愿承认这一点,因为对于开发人员来说,它总是最有趣的,转移平台,并且一次取代整个系统很少有效.有无数的例子,netscape一个. Here is the post from Spolsky on it.(我还推荐这本书Dreaming in Code.这是一个失败的软件项目以及如何和为什么的一个很好的例子).记住要从头开始重写一个系统,你基本上必须经历每一行代码并弄清楚它的作用和原因.起初你认为你可以跳过它,但最终归结为此.就像你说的那样,你的代码已经过时了,这意味着它很可能会完成任务.其中一些你可以忽略,其他人会,“我不知道系统需要它做到这一点.”
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧
默认情况下,生成的页面代码可能与下面的代码类似:
我们可以给object对象传递不同的参数,如xap包的加载地址,onLoad或onError事件句柄,背景色,最小版本号支持等等,完整的参数信息读者可以参考Silverlight 3中param参数列表汇总。object对象中一般会包含一段标记,是用来显示当客户端浏览器未安装Silverlight插件时要显示的内容的,我们可以自定义其中的内容,如: