相关疑难解决方法(0)

为什么canvas.toDataURL()会抛出安全异常?

我睡眠不足还是什么?以下代码

var frame=document.getElementById("viewer");
frame.width=100;
frame.height=100;

var ctx=frame.getContext("2d");
var img=new Image();
img.src="http://www.ansearch.com/images/interface/item/small/image.png"

img.onload=function() {
    // draw image
    ctx.drawImage(img, 0, 0)

    // Here's where the error happens:
    window.open(frame.toDataURL("image/png"));
}
Run Code Online (Sandbox Code Playgroud)

抛出这个错误:

SECURITY_ERR: DOM Exception 18
Run Code Online (Sandbox Code Playgroud)

这不可能不起作用!请问有人解释一下吗?

javascript html5 canvas cross-domain

88
推荐指数
4
解决办法
7万
查看次数

在用户脚本中使用XMLHttpRequest下载图像

首先,在SO上有一个相同标题的问题,但它不是我正在寻找的,也没有完整的答案.

所以这是我的问题.假设我有这个指向图像的URL.

https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash4/299595_10150290138650735_543370734_8021370_355110168_n.jpg
Run Code Online (Sandbox Code Playgroud)

一旦我将此参数放在?dl=1URL的末尾,它就可以下载了.

https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash4/299595_10150290138650735_543370734_8021370_355110168_n.jpg?dl=1
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过用户脚本执行此任务.所以我使用了XMLHttpRequest.

var url = "https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash4/299595_10150290138650735_543370734_8021370_355110168_n.jpg?dl=1";

var request = new XMLHttpRequest();  
request.open("GET", url, false);   
request.send(null);  

if (request.status === 200) 
{  
    alert(request.statusText);
}
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴.

但它不起作用.

javascript xmlhttprequest download userscripts

16
推荐指数
2
解决办法
4万
查看次数

SECURITY_ERR:关于在Chrome扩展程序中使用getImageData的DOM异常18

我正在写第一个Chrome扩展程序.我正在尝试使用jQuery和jQuery Image Desaturate插件http://www.flickr.com上对页面上的图像进行去饱和处理.

我在我的background.html中以编程方式加载我的脚本(以及jQuery和插件):

  // On browser action click, we load jQuery and the desaturate plugin, then 
  // call our own flickrnoir.js to desaturate the photo.
  chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
      chrome.tabs.executeScript(null, {file: "jQuery.desaturate.js" }, function() {
        chrome.tabs.executeScript(null, { file: "flickrnoir.js" });
      })
    });
  });
Run Code Online (Sandbox Code Playgroud)

我在我的Flickr页面中指定了权限manifest.json:

"permissions": [
  "tabs", "http://www.flickr.com/", "http://*.static.flickr.com/"
]
Run Code Online (Sandbox Code Playgroud)

这看起来工作得很好,例如,我可以将Flickr照片页面上所有div的背景添加为红色flickrnoir.js,然后打开Flickr页面并点击我的扩展程序按钮:

$("div").css("background-color", "#ff0000");
Run Code Online (Sandbox Code Playgroud)

...所以,我成功加载了jQuery,它可以成功访问和更改http://*.flickr.com/*页面的DOM元素.

但是,当我尝试使用去饱和插件去饱和图像(或者所有图像,实际上)时,我遇到了安全错误.我的代码:

$("img").desaturate();
Run Code Online (Sandbox Code Playgroud)

...最终以运行此行的jQuery.desaturate插件的代码结束:

var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH); …
Run Code Online (Sandbox Code Playgroud)

security canvas getimagedata google-chrome-extension

10
推荐指数
1
解决办法
2万
查看次数