2017-03-01 7 views
0

Safari 확장 프로그램을 빌드하여 웹 페이지의 스크린 샷을 공유하려하지만 이미지를 Swift로 다시 전달하려고하면 Safari가 불안정 해지고 중간 작업이 중단되는 오류가 발생합니다. .Safari Extension에서 dispatchMessage를 사용할 때 WebKitSubtleCrypto 오류가 발생했습니다.

사용자가 툴바 버튼을 누르면 선택한 텍스트가 표시되고 웹 페이지의 스크린 샷이 저장됩니다. userInfo 사전을 통해 이들 두 가지를 전달하려고합니다. 내가 코드를 dispatchMessage 호출로 주석 처리 한 경우 오류가 표시되지 않습니다. - 스크립트와 함께 제공 다른 파일에

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-beta4 최신가) : 여기

WebKitSubtleCrypto is deprecated. Please use SubtleCrypto instead. 

내 JS 코드입니다 : 내가 디스패치 호출을 주석 처리를 제거하면 나는 다음과 같은 오류가 표시 확장자. 1

편집 한 후 좀 더이 오류 만 messageDipatch 통화에서 '스크린 샷'객체를 전달과 관련이있다 것처럼 보이는 테스트. 스크린 샷을 꺼내서 selectedText 데이터 만 전달하면 예상대로 작동합니다. 나는 또한 'convertCanvasToImage()'호출을 통해 실행하는 대신 캔버스를 통해 스크린 샷을 전달하려고 시도했지만 동일한 오류가 발생합니다.

답변

0

문제는 캔버스를 데이터 URL로 변환하기 전에 이미지 데이터를 초기화하는 방법과 관련이 있습니다.

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

에 :에서가는

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

문제를 해결.

let imageString = userInfo?["screenshot"] as! String 
    let imageData = NSData.init(contentsOf: NSURL(string: imageString) as! URL) 
    let image = NSImage(data: imageData as! Data) 
이 스위프트 측면에서

내가 데이터를합니다 (모든이에 강제주의) 것을 디코딩하고 어떻게