如果我在 HTML 页面中放置一个脚本标签,它会工作,但是当我加载包含 ZeroClipboard 库的外部页面时,我无法让它工作。该对象被创建,并且位于正确的元素上,但它不会发出任何事件,也不会复制剪贴板文本。例子:
var ZeroClipboard = defineZClip(); // This is a scoped function that has the zclip library in it
window.onload = function () {
console.log("doc loaded"); // This fires
var button = document.getElementById('z-button');
var clip = new ZeroClipboard(button, {
moviePath: 'ZeroClipboard.swf'
});
clip.on('load', function () {
console.log("loaded"); // This never fires
})
};
我可以通过动态插入一个脚本标签来解决这个问题,其中包含初始化 ZeroClipboard 的脚本标签的内容,但如果我从我的脚本中初始化它,它就不起作用。像这样:
var ZeroClipboard = defineZClip();
window.ZeroClipboard = ZeroClipboard;
window.onZeroLoad = function (clip) {
console.log("zero loaded"); // This fires
};
var scriptText = 'window.onload = function () { console.log("window loaded");var button = document.getElementById("z-button");'
+' var clip = new ZeroClipboard(button, {moviePath: "ZeroClipboard.swf"});'
+' clip.on("load", window.onZeroLoad );'
+'};'
var script = document.createElement('script');
script.innerHTML = scriptText;
document.head.appendChild(script);
但是,这提供了一些明显的缺点。比如......它有点违背了让所有东西都被限定的目的,因为现在 ZeroClipboard 必须可以通过窗口访问。再加上它更难阅读等等。