javascript - 将 Skype 按钮添加到 HTML 面板

标签 javascript html gwt jsni

我正在使用 GWT 开发 Web 应用程序,并希望使用 Skype URI特别是从此生成器生成的代码:SkypeButton

我使用 HTML 面板,因为它看起来像/工作起来像 HTML(见下文)。我已经拥有的:

入门级

@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);
    }

当我运行此代码时没有成功。这是编译后 HTML 代码在浏览器中的样子。

开发者工具 (Chrome)

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

但是当我在 index.html 文件中使用上面的代码时,JS 从 skype 生成的代码创建此代码:

开发者工具 (Chrome)

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

我的猜测是我的应用程序不会像网络服务器处理index.html那样执行生成的JS。

经过我的研究,我发现 JSNI 主题适合,但我不知道如何将生成的代码放入我的项目中。 :(

有人可以帮我解决这个问题吗?一个例子或方向会很棒:)

最佳答案

您无法使用 innerHTML(HTMLPanel 使用)注入(inject)脚本。您必须以编程方式构造 ScriptElement,或者使用 GWT,您可以简单地使用 ScriptInjector (不过不要忘记setWindow(TOP_WINDOW))。

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();

(请注意 IE 上的 setCallback,请参阅 javadoc)

关于javascript - 将 Skype 按钮添加到 HTML 面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973002/

相关文章:

javascript函数(输入日期大于今天的日期)

javascript - 从 Object.defineProperties() 定义的函数调用中获取 'this'

javascript - 为容器中的非全宽图像创建视差效果

html - 点击图片提交表单

php - 设置操作后,html 发布表单不会发送数据

java - GWT 更改 menuBar 位置

javascript - 简单的多行正则表达式在 .NET 中失败,但在 ECMAScript 中成功 - 为什么?

javascript - 未捕获的语法错误 : Unexpected token ) when calling a function

java - GWT:如何使用区域设置的私有(private)标记

css - 在使用窗口生成器定位文本框和其他 gwt 小部件后,我们如何使用 css 定位它们