5

最初,這篇文章是關於我試圖將ZeroClipboard注入到網頁中並供我的Chrome擴展使用,但是我一直沉迷於這種情況,似乎是徒勞無益地嘗試找出問題,我仍然不能得到它的工作。ZeroClipboard只是不工作

我甚至沒法把the actual, documented "Minimal Example「關於ZeroClipboard自己的GitHub的工作(當然,我已經改裝成源實際上是HTML5的有效的,但確切原也不能工作),即使test.html,這包括在tar.gz存檔,不工作

「小例子」:代碼

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title></title> 
    </head> 
    <body> 
     <input type="button" id="d_clip_button" data-clipboard-text="Copy Me!" value="Copy To Clipboard" /> 
     <script src="ZeroClipboard.js"></script> 
     <script> 
      var clip = new ZeroClipboard(document.getElementById('d_clip_button')); 
     </script> 
    </body> 
</html> 

「小例子」:控制檯輸出

Uncaught TypeError: object is not a function index.html:11 

信息

  • zeroclipboard-1.0.7.tar.gz archive的全部內容都在同一目錄index.html
  • ZeroClipboard.js文件未損壞/不完整且正在正確加載。
  • 我使用Chrome v24.0.1312.52

 

要麼我失去了一些東西真的,真的在這裏明顯或ZeroClipboard的文檔/功能是糟糕透頂。

回答

-1

對於加載外部腳本,在頁面主體中插入SCRIPT元素將而不是立即加載並執行腳本。 appendChild將立即返回,並且腳本將在之後加載當前腳本執行從所有函數返回並進入空閒狀態。

對此,SCRIPT元素的onload屬性可用於在外部腳本加載後執行代碼。

function inject_zeroClipboard(){ 
    var path_Root_zeroClipboard = chrome.extension.getURL("plugins/zeroClipboard"); 
    var element_Head = document.getElementsByTagName('head')[0]; 
    var element_zeroClipboard = document.createElement("script"); 
    element_zeroClipboard.src = path_Root_zeroClipboard + "/ZeroClipboard.js"; 

    element_zeroClipboard.onload = function() { 
     ZeroClipboard.setMoviePath(path_Root_zeroClipboard + "/ZeroClipboard10.swf"); 
     var clip = new ZeroClipboard.Client(); 
     clip.glue("element_Example"); 
     clip.addEventListener("click", function(){ 
      clip.setText(data_Example); 
     }); 
    }; 

    element_Head.appendChild(element_zeroClipboard); 
} 
+0

不,似乎沒有奏效。同樣的錯誤。 :/ – mythofechelon

+0

確保'ZeroClipboard.js'文件沒有損壞或部分加載,這防止了'ZeroClipboard'對象被創建。檢查'Uncaught ReferenceError:ZeroClipboard未定義'之前的錯誤。 – Jay

+0

沒有。 'ZeroClipboard.js'完全加載。 – mythofechelon

0

對我來說,問題在於變量模塊已經由我使用的框架定義,而不是像ZeroClipboard那樣使用。事實上,如果你看一下ZeroClipboard.js文件的末尾,這裏是你可以看到:

if (typeof module !== "undefined") { 
    module.exports = ZeroClipboard; 
    } else if (typeof define === "function" && define.amd) { 
    define(function() { 
     return ZeroClipboard; 
    }); 
    } else { 
    window.ZeroClipboard = ZeroClipboard; 
    } 

我剛剛更換此通過下面的代碼來解決這個問題:

window.ZeroClipboard = ZeroClipboard; 
1

你將需要指定SWF文件的路徑:

var clip = new ZeroClipboard(document.getElementById('d_clip_button'),{moviePath: "/path/ZeroClipboard.swf"});