看来flash的安全沙箱没有限制将内容复制到剪贴板 ,不重新编译Dll1

2019-11-26 作者:美高梅-服务器   |   浏览(54)

但是用flash就可以复制。例子就是VeryCd,看“复制选中的连接”按钮是一个flash。看来flash的安全沙箱没有限制将内容复制到剪贴板

今天看到有个Google Code的项目,叫ZeroClipboard:

帮忙看一下这些代码有问题啊
最近在学GWT,因为要用到一个包,所以接触到这个例子但有些不明白,这些代码是

但是也是有限制的:

大意是使用flash作为媒介,将内容复制到剪贴板。这比用纯javascript好,因为不同浏览器会出于安全的原因,有不同反应,例如IE会给出提示,有的浏览器不支持复制到剪贴板。

使用GWT已经半年了,查了很多资料,但发现国内关注它的人很少,而且骂声也不少(当然GWT也有让我恶心的地方),所以就把平时实验的结果和感想,在这里和大家分享一下。

[code="java"]package com.google.code.gwt.database.sample.hellodatabase.client;

1 根据ZeroClipborad的人们说,这些flash必须通过网络加载。

但是用flash就可以复制。例子就是VeryCd,看“复制选中的连接”按钮是一个flash。看来flash的安全沙箱没有限制将内容复制到剪贴板 

GWT困扰我的一个最恶心的缺点,就是凡事要编译。系统一大,模块之间依赖很强,修改一个客户端(界面)的小功能,就要重编译整个项目,费时费劲,我们项目现在重编一次已经需要800多秒了——好在有Development mode(感叹这个东东的强大)。

import java.util.Date;
import java.util.List;

Zero Clipboard Does Not Work From Local Disk

图片 1 

之前看到过GWT提供JSNI的功能,能够使gwt 的java code与纯JavaScript互通信,因此打算尝试使用JSNI作为中介,看看能不能减轻模块间的依赖——或者实现多模块之间实现分模块编译。

import com.google.code.gwt.database.client.Database;
import com.google.code.gwt.database.client.service.DataServiceException;
import com.google.code.gwt.database.client.service.ListCallback;
import com.google.code.gwt.database.client.service.RowIdListCallback;
import com.google.code.gwt.database.client.service.ScalarCallback;
import com.google.code.gwt.database.client.service.VoidCallback;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

This is a security restriction by Adobe Flash Player. Unfortunately, since we are utilizing theJavaScript-to-Flashinterface ("ExternalInterface") this only works while truly online (if the page URL starts with "http://" or "https://"). It won't work running from a local file on disk.

 

想法是这样的,大部分模块基本是不变的,希望不要经常编译,假设其为Dll1;有些为客户开发的模块Dll2,它依赖于Dll1,而且经常发生变化(需求总是变化的)。希望修改了Dll2后,不重新编译Dll1。

/**

However, there is a way for you to edit your local Flash Player security settings and allow this. Go to this website:

但是也是有限制的: 

Dll1和Dll2只是一个命名,并不是真正的dll啊!

  • Entry point classes define onModuleLoad().
    */
    public class HelloDatabase implements EntryPoint {

    ClickCountDataService dbService = GWT.create(ClickCountDataService.class);
    private VerticalPanel vPanel;

    /**

    • This is the entry point method.*/public void onModuleLoad() {if (!Database.isSupported {Window.alert("HTML 5 Database is NOT supported in this browser!");return;}

    // Create the dialog box
    final DialogBox dialogBox = new DialogBox();
    dialogBox.setText("Welcome to GWT Database Demo!");
    dialogBox.setAnimationEnabled;
    Button closeButton = new Button("close", new ClickHandler() {
    public void onClick(ClickEvent event) {
    dialogBox.hide();
    }
    });
    VerticalPanel dialogVPanel = new VerticalPanel();
    dialogVPanel.setWidth;
    dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
    final VerticalPanel clickedData = new VerticalPanel();
    dialogVPanel.add(clickedData);
    dialogVPanel.add(closeButton);

    dialogBox.setWidget(dialogVPanel);

    Image img = new Image("");
    Button addClickButton = new Button("Add Click", new ClickHandler() {
    public void onClick(ClickEvent event) {
    dbService.insertClick(new Date(), new RowIdListCallback() {
    public void onFailure(DataServiceException error) {
    Window.alert("Failed to add click! " + error);
    }

     public void onSuccess(final List<Integer> rowIds) { dbService.getClicks(new ListCallback<ClickRow>() { public void onFailure(DataServiceException error) { Window.alert("Failed to query clicks! " + error); } public void onSuccess(List<ClickRow> result) { clickedData.clear(); clickedData.add(new Label("Last click insert ID: " + rowIds.get; for (ClickRow row : result) { clickedData.add(new Label("Clicked on " + row.getClicked; } dialogBox.center(); dialogBox.show; }});
    

    }
    });
    Button getCountButton = new Button("Get Counts", new ClickHandler() {
    public void onClick(ClickEvent event) {
    getCount();
    }
    });

    vPanel = new VerticalPanel();
    // We can add style names.
    vPanel.addStyleName("widePanel");
    vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
    vPanel.add;
    vPanel.add(addClickButton);
    vPanel.add(getCountButton);

    // Add image and button to the RootPanel
    RootPanel.get().add;

    // Create table 'clickcount' if it doesn't exist already:
    dbService.initTable(new VoidCallback() {
    public void onFailure(DataServiceException error) {
    Window.alert("Failed to initialize table! " + error);
    }

    public void onSuccess() {
    Window.alert("Database initialized successfully.");
    getCount();
    }
    });

    getVersion();
    }

    private void getVersion() {
    dbService.getSqliteVersion(new ScalarCallback() {
    public void onFailure(DataServiceException error) {
    Window.alert("Failed to get SQLite version! " + error);
    }

    public void onSuccess(String result) {
    vPanel.add(new Label("SQLite version: " + result));
    }
    });
    }

    private void getCount() {
    dbService.getClickCount(new ScalarCallback() {
    public void onFailure(DataServiceException error) {
    Window.alert("Failed to get count! " + error);
    }

    public void onSuccess(Integer result) {
    vPanel.add(new Label("There are " + result + " recorded clicks."));
    }
    });
    }
    }
    [/code]

1 根据ZeroClipborad的人们说,这些flash必须通过网络加载。

如果按照GWT的依赖实现,Dll2中的gwt.xml中,声明inherit name="demo1.Dll1"后,重编Dll2其实就包含重编Dll1

[code="java"]package com.google.code.gwt.database.sample.hellodatabase.client;

And add the path to your local "ZeroClipboard.swf" file to the trusted files list, or try the "allow all" option.

 Zero Clipboard Does Not Work From Local Disk

使用JSNI,见

import java.util.Date;

本文由美高梅赌堵59599发布于美高梅-服务器,转载请注明出处:看来flash的安全沙箱没有限制将内容复制到剪贴板 ,不重新编译Dll1

关键词: