首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Safari扩展中使用WebKitSubtleCrypto时的dispatchMessage错误

在Safari扩展中使用WebKitSubtleCrypto时的dispatchMessage错误
EN

Stack Overflow用户
提问于 2017-03-01 19:55:31
回答 1查看 111关注 0票数 0

我试图构建一个Safari扩展来共享网页的屏幕截图,但是当我试图将图像传回Swift时,我会得到一个错误,这会使Safari不稳定,并在过程中终止我的任务。

这样的想法是,当用户点击工具栏按钮时,任何选定的文本和网页的屏幕截图都会被保存。我正试图通过userInfo字典把这两种方法都传递出去。如果我按照注释掉的dispatchMessage调用运行我的代码,我就不会看到任何错误。如果取消对调度调用的注释,则会看到以下错误:

代码语言:javascript
运行
复制
 WebKitSubtleCrypto is deprecated. Please use SubtleCrypto instead.

这是我的js代码:

代码语言:javascript
运行
复制
document.addEventListener("DOMContentLoaded", function(event) {
    safari.self.addEventListener("message", handleMessage);
});

function handleMessage(event) {
    var selectedText = window.getSelection().toString();
    var screenshot;

    if (window.top === window) {
  html2canvas(document.getElementsByTagName('html')).then(function(canvas) {
        screenshot = convertCanvasToImage(canvas);
        console.log("canvas image: " + screenshot)
        safari.extension.dispatchMessage("test", {"selectedText": selectedText, "screenshot" : canvas});
        });
    }
}

function convertCanvasToImage(canvas) {
   var image = new Image();
   image.src = canvas.toDataURL("image/png");
   return image;
}

html2canvas (最新的-0.5.0-beta 4)脚本位于另一个带有扩展名的文件中。

编辑1

经过更多的测试后,这个错误似乎只与在messageDipatch调用中传递“屏幕快照”对象有关。如果我取出屏幕截图,并且只传递selectedText数据,它就会像预期的那样工作。我还尝试将屏幕截图作为画布传递,而不是通过'convertCanvasToImage()‘调用来运行它,但是我也收到了同样的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 21:35:40

这个问题最终与我在将画布转换为数据url之前如何插入图像数据有关。

从:

代码语言:javascript
运行
复制
function convertCanvasToImage(canvas) {
   var image = new Image();
   image.src = canvas.toDataURL("image/png");
   return image;
}

至:

代码语言:javascript
运行
复制
function convertCanvasToImage(canvas) {
    var imageData = canvas.toDataURL("image/png")
    return imageData;
}

解决了这个问题。

在Swift方面,我就是这样解码这些数据的(注意所有的强迫):

代码语言:javascript
运行
复制
    let imageString = userInfo?["screenshot"] as! String
    let imageData = NSData.init(contentsOf: NSURL(string: imageString) as! URL)
    let image = NSImage(data: imageData as! Data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42540827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档