6

Trong tập lệnh người dùng chrome sau, làm cách nào tôi có thể nhận được url cho hình ảnh mà tôi kéo từ máy tính để bàn của mình? Nơi tôi có dòng debugger, tôi nhận được chuỗi rỗng cho e.dataTransfer.getData("text")e.dataTransfer.getData("url")Làm cách nào để lấy URL cho hình ảnh bị bỏ qua bằng cách sử dụng một người dùng chrome?

// ==UserScript== 
// @match http://*/* 
// @match https://*/* 
// ==/UserScript== 

function preventDrag(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
} 

function handleDrop(e) { 
    console.log("Just dropped: " + e.dataTransfer.files[0].name); 
    debugger 
    // TODO: grab the url for e.dataTransfer.files[0] 

    e.stopPropagation(); 
    e.preventDefault(); 
} 

document.addEventListener('drop', handleDrop, false); 
document.addEventListener('dragenter', preventDrag, false); 
document.addEventListener('dragover', preventDrag, false); 
+0

Vì vậy, các cuộc gọi đến an ủi log không đăng nhập đúng tên tập tin? –

+0

@ Có, nó báo cáo tên tệp, nhưng không có bất kỳ đường dẫn nào. –

+1

Không chắc chắn để hiểu rõ, nhưng nếu tôi làm, bạn sẽ không thể có một đường dẫn tập tin (có nghĩa là tập tin fullpath bị bỏ). Đó là một "bảo vệ" từ các trình duyệt. Nhưng ít nhất bạn cũng có thể lấy tên của nó. Đây là một jsFiddle làm thế nào để làm điều đó: http://jsfiddle.net/U8yqL/1/ – Leiko

Trả lời

5

Không chắc để hiểu tốt, nhưng nếu tôi làm, bạn sẽ không thể có một đường dẫn tập tin (có nghĩa là tập tin fullpath đã bị xóa).
Đó là "bảo vệ" từ trình duyệt. Nhưng ít nhất bạn cũng có thể lấy tên của nó.

var file = e.originalEvent.dataTransfer.files[0], 
     reader = new FileReader(); 

    reader.onloadend = function (event) { 
     console.log(file); 
     // filename is in file.name 
     // ... do something here 
    } 
    reader.readAsArrayBuffer(file); 

Đây là một jsFiddle làm thế nào để làm điều đó: jsFiddle demo

Các vấn đề liên quan