将外部Web小部件添加到Panel

时间:2016-12-22 09:58:53

标签: gwt

我试图从天气网站添加外部网页小部件。它给了我一些这样的想法:

<div id='cont_5caab8f298a3d34d53973f2d8906d1f7'><script type='text/javascript' async src='https://www.tiempo.com/wid_loader/5caab8f298a3d34d53973f2d8906d1f7'></script></div>

我尝试使用该代码创建一个HTML小部件并将其添加到我的面板中,但它没有显示。

2 个答案:

答案 0 :(得分:1)

您提供的嵌入代码仅在HTML文件中包含时才有效。动态添加时不起作用。例如,如果您在Web浏览器中打开一个空的HTML文件并运行:

document.body.innerHTML += "<div id='cont_5caab8f298a3d34d53973f2d8906d1f7'><script type='text/javascript' async src='https://www.tiempo.com/wid_loader/5caab8f298a3d34d53973f2d8906d1f7'></script></div>";

在开发人员(F12)控制台中,您将看到外部内容未加载。这是因为以这种方式添加时脚本will not会自动执行。

但是,您不需要执行此外部脚本。它所做的就是创建并插入一个iframe,并设置一些属性和样式。如果我们查看script的源代码,我们可以将其转换为GWT等价物。

嵌入JS脚本:

conte = document.getElementById("cont_5caab8f298a3d34d53973f2d8906d1f7");
                    if (conte) {
                        conte.style.cssText = "width: 176px; color: #868686; background-color:#FFFFFF; border:1px solid #D6D6D6; margin: 0 auto; font-family: Roboto;";
                        elem = document.createElement("iframe");
                        elem.style.cssText = "width:176px; color:#868686; height:200px;";
                        elem.id = "5caab8f298a3d34d53973f2d8906d1f7";
                        elem.src = "https://www.tiempo.com/getwid/5caab8f298a3d34d53973f2d8906d1f7";
                        elem.frameBorder = 0;
                        elem.allowTransparency = true;
                        elem.scrolling = "no";
                        elem.name = "flipe";
                        conte.appendChild(elem);
                    }

GWT等价物:

public class Hello implements EntryPoint {
    public void onModuleLoad() {
        Panel root = RootPanel.get("main"); // replace with your Panel

        //This doesn't work:
        //HTML embed = new HTML("<div id='cont_5caab8f298a3d34d53973f2d8906d1f7'><script type='text/javascript' async src='https://www.tiempo.com/wid_loader/5caab8f298a3d34d53973f2d8906d1f7'></script></div>");

        //This does:
        Frame embed =  new Frame("https://www.tiempo.com/getwid/5caab8f298a3d34d53973f2d8906d1f7");
        embed.setStyleName(""); // remove GWT styling. You could add your own CSS class here.
        embed.getElement().setAttribute("style", "width:176px; color:#868686; height:200px;");
        embed.getElement().setAttribute("frameborder", "0");
        embed.getElement().setAttribute("scrolling", "no");

        root.add(embed);
    }
}

答案 1 :(得分:0)

您可以使用IFrame元素加载外部内容。

final Frame frame = new Frame("url");
frame.addLoadHandler(new LoadHandler() {
    @Override
    public void onLoad(LoadEvent event) {
        // do stuff here
    }
});
RootPanel.get("mydiv").add(frame);

但请注意,由于跨站点脚本,您将无法与外部内容进行交互。