在Firefox中透過Javascript存取剪貼簿
| | 6 | | ![]() |
在上一篇強化程式範例複製功能裡,其實迴避了一個問題: 使用者真正想要的操作是點一下就搞定呀! "點一下->Ctrl-A->Ctrl-C"的操作步驟肯定會被嫌棄。不過,據我先前的了解,存取剪貼簿的Javascript存在跨瀏覽器的問題,除了IE內建支援外,其他瀏覽器等靠另嵌Flash物件達成,以前找到的解決方案在Flash Player 10改變剪貼篿存取政策後就壞了,我也一直發懶沒去找替代方案。無法解決IE以外瀏覽器的複製功能,獨厚IE必會引發民怨,為了公平起見,索性就不加自動複製功能了。(謎之聲: 真的是因為這樣嗎? 懶鬼!)
琛哥說,出來混,遲早是要還的。
果不其然,貼文不到幾小時,自以為天衣無縫的裝死行徑立刻被眼尖網友識破,只好乖乖出來誠實面對。
爬了一下文,很幸運地找到了一個Frefox的解決方案,不需引用額外的Flash,只要調整Firefox的signed.applets.codebase_principal_support安全設定即可支援。
(警告: 啟用該選項會增加資安風險,但就我的理解,它所開放的範圍限於經電子簽章簽署過的元件,應無重大漏洞。但各位仍應依自己的資安原則,斟酌是否使用。)
我已在網站加上複製文字的功能。在IE裡可以直接服用,Firefox則需要透過以下的步驟調整設定,至於其他瀏覽器,我則悍然決定繼續裝死。(如果有人知道解決方案,歡迎提供)
在Firefox網址列輸入”about:config”,會先出現警告訊息。(題外話,這個警告訊息的用字深得我心呀!)
在篩選條件輸入signed就可以馬上找到該選項,將值由false改成true。
如此,在Firefox也可以享受直接打包帶走的服務囉!
以下是我偷學到的剪貼簿複製函數,順手貼出來供有興趣研究的熱血青年參考:
//Copy to clipboard: ref http://forum.moztw.org/viewtopic.php?p=131407
function copyToClipboard(txt) {
var copied = false;
if(window.clipboardData) {
window.clipboardData.clearData();
window.clipboardData.setData("Text", txt);
copied = true;
} else if (window.netscape) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("被瀏覽器拒絕!\n請在瀏覽器網址列輸入'about:config'\n,將'signed.applets.codebase_principal_support'設為'true'");
}
var clip = Components.classes['@mozilla.org/widget/clipboard;1']
.createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext = txt;
str.data = copytext;
trans.setTransferData("text/unicode",str,copytext.length*2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans,null,clipid.kGlobalClipboard);
copied = true;
}
if (copied) alert('文字內容已複製到剪貼簿中!');
else alert("使用的瀏覽器不支援文字複製功能!");
}
Comments
# by evakey
偷偷跟你說… 我點了「複製文字」後選擇「不允許」,它就跟我說「文字內容已複製到剪貼簿中」,之後就一直說這句話,不再問我了(另開分頁就正常,IE7)
# by Holy
http://www.watch-life.net/javascript/copy-to-clipboard-solution.html 最後面有提到如何"破解" Flash Player 10 無法複製的方法,支援 Fx、IE、Opera、Chrome、Safari。
# by HELLO
請問一下,有辨法把上面那段加入在Greasemonkey裡嗎,例如幫網頁裡的某個input增加"點擊他就會複製input裡的內容"嗎??謝謝
# by player
Copy來用了 原來Flash的Copy法被改掉了, 難怪我試了好幾天試不出來 與MediaWiki整合 寫在 http://www.player.idv.tw/prog/index.php/MediaWiki:Common.js
# by Fatherch
小弟不才,可否請大大寫一個讀取剪貼簿的Function呢?困擾我很久了,感謝阿~~
# by kk
copy = function (object) { if (injectedScript._type(object) === "node") object = object.outerHTML; InjectedScriptHost.copyText(object); } 目前只試過以下版本瀏覽器是可行的,IE 沒辦法 FireFox 12.0 Chrome 19.0.1084.56