Javascript 将Skype按钮添加到HTML面板
我正在使用GWT开发一个Web应用程序,并希望使用此生成器生成的代码: 我使用HTML面板是因为它看起来/工作起来像HTML(见下文)。我已经拥有的: EntryClassJavascript 将Skype按钮添加到HTML面板,javascript,html,gwt,jsni,Javascript,Html,Gwt,Jsni,我正在使用GWT开发一个Web应用程序,并希望使用此生成器生成的代码: 我使用HTML面板是因为它看起来/工作起来像HTML(见下文)。我已经拥有的: EntryClass @Override public void onModuleLoad() { HTMLPanel htmlPanel = new HTMLPanel("<h1>Headline</h1>"); HTMLPanel skype = new HTMLPanel( "<s
@Override
public void onModuleLoad() {
HTMLPanel htmlPanel = new HTMLPanel("<h1>Headline</h1>");
HTMLPanel skype = new HTMLPanel(
"<script type=\"text/javascript\"
src=\"http://www.skypeassets.com/i/scom/js/skype-uri.js\"></script>"
+ "<script type=\"text/javascript\">"
+ "Skype.ui({\"name\": \"call\",\"element\": "
+ "\"SkypeButton_Call_My.User_1\",\"participants\": "
+ "[\"My.User\"], \"imageSize\": 32 });"
+ " </script> ");
skype.getElement().setId("SkypeButton_Call_My.User_1");
RootPanel.get().add(htmlPanel);
RootPanel.get().add(skype);
}
@覆盖
moduleload()上的公共void{
HTMLPanel HTMLPanel=新HTMLPanel(“标题”);
HTMLPanel skype=新HTMLPanel(
""
+ ""
+“Skype.ui({\'name\':\'call\',\'element\':”
+“\“SkypeButton\呼叫\我的用户\ 1\”,\“参与者\”:”
+“[\“My.User\”],\“imageSize\”:32})
+ " ");
skype.getElement().setId(“SkypeButton\u Call\u My.User\u 1”);
RootPanel.get().add(htmlPanel);
RootPanel.get().add(skype);
}
当我运行此代码时,没有成功。这就是编译后HTML代码在浏览器中的外观
开发者工具(Chrome)
Skype.ui({
“名称”:“呼叫”,
“元素”:“SkypeButton\u Call\u My.User\u 1”,
“参与者”:[“我的用户”],
“图像大小”:32});
但当我在index.html文件中使用上述代码时,JS会根据skype生成的代码创建以下代码:
开发者工具(Chrome)
我的猜测是,我的应用程序不会像Web服务器对index.html那样执行生成的JS
在我的研究之后,我发现JSNI主题是合适的,但我不知道如何将生成的代码放入我的项目中(
有人能帮我解决这个问题吗?举个例子或说明会很好:)您不能使用
innerHTML
(这是HTMLPanel
使用的)注入脚本。您必须以编程方式构造ScriptElement
s,或者使用GWT您可以简单地使用(但不要忘记setWindow(TOP\u WINDOW)
)。
ScriptInjector.fromUrl(“http://www.skypeassets.com/i/scom/js/skype-uri.js")
.setWindow(ScriptInjector.TOP_窗口)
.setCallback(新回调(){
@凌驾
成功时公开作废(作废结果){
ScriptInjector.fromString(“Skype.ui({\'name\':\'call\',\'element\':”
+“\“SkypeButton\呼叫\我的用户\ 1\”,\“参与者\”:”
+“[\'My.User\'],\'imageSize\':32});”)
.setWindow(ScriptInjector.TOP_窗口)
.inject();
}
@凌驾
公共无效申报人(例外e){
GWT.报告未处理的异常(e);
}
})
.inject();
(请注意IE上的
setCallback
,请参阅javadoc)thx您的答案,我必须将skype生成的skcript放在哪里才能注入它?我必须把a.js变大吗?谢谢@Thomas Broyer。工作很好:)
<div id="SkypeButton_Call_My.User_1">
<script type="text/javascript" src="http://www.skypeassets.com/i/scom/js/skype-uri.js"></script>
<script type="text/javascript">
Skype.ui({
"name": "call",
"element":"SkypeButton_Call_My.User_1",
"participants": ["My.User"],
"imageSize": 32 });
</script>
</div>
<a href="javascript://"
onclick="Skype.tryAnalyzeSkypeUri('call', '0');
Skype.trySkypeUri_Generic('skype:My.User?call', '_detectSkypeClient_1393181312260', '0');
return false;
">
<img src="http://www.skypeassets.com/i/scom/images/skype-buttons/callbutton_32px.png"
alt="Skype call"
role="Button"
style="border:0;
margin:32px;
vertical-align:-41px;">
</a>
ScriptInjector.fromUrl("http://www.skypeassets.com/i/scom/js/skype-uri.js")
.setWindow(ScriptInjector.TOP_WINDOW)
.setCallback(new Callback<Void, Exception>() {
@Override
public void onSuccess(Void result) {
ScriptInjector.fromString("Skype.ui({\"name\": \"call\",\"element\": "
+ "\"SkypeButton_Call_My.User_1\",\"participants\": "
+ "[\"My.User\"], \"imageSize\": 32 });")
.setWindow(ScriptInjector.TOP_WINDOW)
.inject();
}
@Override
public void onError(Exception e) {
GWT.reportUnhandledException(e);
}
})
.inject();