|
阅读:4016回复:8
Abduction: the image is too large ??
Abduction:
Sorry, the image is too large, Firefox can not save it. 是多大的圖會出現這句阿?為什麼要有這個限制?能不能把它用掉啊? 好像的確少了複製到剪貼簿和工具列圖示按鈕, 用起來可能不夠方便,有沒有人(Cye3s)會改啊?! |
|
|
|
1楼#
发布于:2013-03-20 18:00
一直用不来,各种错误提示,所以改用手势脚本了
var canvas = content.document.createElement("canvas");
canvas.width = content.document.body.clientWidth;
canvas.height = content.document.body.clientHeight;
var ctx = canvas.getContext("2d");
ctx.drawWindow(content, 0, 0, canvas.width, canvas.height, "rgb(255,255,255)");
saveImageURL(canvas.toDataURL(), content.document.title + ".png",
null,null,null,null,document);经测试可保存页面长度最长32767px的页面,等于或过32768px就会提示组件错误(nsDOMHTMLCanvasElement.toDataURL),不知道怎么解决不过一般来说够用了。 abduction那个记得好像是作者代码里自己写的硬限制,现在已经低于fx本身的限制了 fx复制图片好像有点麻烦,不过可以退一步,你可以复制图片的data url…… var canvas = content.document.createElement("canvas");
canvas.width = content.document.body.clientWidth;
canvas.height = content.document.body.clientHeight;
var ctx = canvas.getContext("2d");
ctx.drawWindow(content, 0, 0, canvas.width, canvas.height, "rgb(255,255,255)");
var imageURI = canvas.toDataURL()
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].getService(Components.interfaces.nsIClipboard);
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if(typeof(clip) == "object" && typeof(trans) == "object") {
trans.addDataFlavor('text/unicode');
var stingSupporter = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
stingSupporter.data = imageURI;
trans.setTransferData("text/unicode", stingSupporter, imageURI.length * 2);
var clipid = Components.interfaces.nsIClipboard;
clip.setData(trans, null, clipid.kGlobalClipboard);
success = true;
}或者你可以尝试截图后弹出一个div然后手动复制/保存,比如下面的简陋版,左键单击关闭,右键可以复制或保存 var canvas = content.document.createElement("canvas");
canvas.width = content.document.body.clientWidth;
canvas.height = content.document.body.clientHeight;
var ctx = canvas.getContext("2d");
ctx.drawWindow(content, 0, 0, canvas.width, canvas.height, "rgb(255,255,255)");
var imageURI = canvas.toDataURL()
var imageBox = content.document.createElement("img");
imageBox.src = imageURI;
imageBox.style.position = "fixed";
imageBox.style.top = "0";
imageBox.style.boxShadow = "#444 2px 2px 2px 1px";
imageBox.height = "500";
imageBox.width = canvas.width/canvas.height*500;
imageBox.onclick = function(e){
if(e.button === 0){
content.document.body.removeChild(imageBox);
}
}
content.document.body.appendChild(imageBox); |
|
|
|
2楼#
发布于:2013-03-20 18:00
|
|
|
|
3楼#
发布于:2013-03-20 18:00
|
|
|
|
4楼#
发布于:2013-03-20 18:00
用掉是啥意思?
我记得是Firefox的限制 |
|
|
|
5楼#
发布于:2013-03-20 18:00
|
|
|
|
6楼#
发布于:2013-03-20 18:00
图片:2.png ![]() 工具条更烂,不到32768就躺了 你可以试试: <!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Screen shot test</title>
</head>
<body>
<pre>當前長度:<span id="bodyLengthLabel"></span></pre>
<input type="number" id="bodyLength"/>
<button onclick="SetBodyLength()">設置頁面長度(單位:px)</button>
<script type="text/javascript">
function ShowBodyLength(){
var length = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("height");
document.getElementById("bodyLengthLabel").textContent = length;
}
function SetBodyLength(){
var bodyLength = Number(document.getElementById("bodyLength").value);
if( (typeof bodyLength === "number") && (bodyLength > 0) && (bodyLength < Infinity) ){
document.body.style.height = bodyLength + "px";
ShowBodyLength();
}
}
ShowBodyLength();
</script>
</body>
</html>相关bug有,但是不知道是不是一回事 |
|
|
|
7楼#
发布于:2013-03-20 18:00
|
|
|
|
8楼#
发布于:2013-03-20 18:00
對阿!這什麼意思?!
[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHTMLCanvasElement.toDataURL]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: resource://gre/modules/devtools/CmdScreenshot.jsm :: Command_screenshotGrabScreen :: line 129" data: no] 你那網頁測的每次上限都不同耶?! 跟 browser.cache.disk.smart_size_cached_value 有關嗎?! |
|
|
