תמיכה ב-Blob ב-IndexedDB נחתה ב-Chrome Dev

אייג'י קיטמורה
אייג'י קיטמורה

גרסת הפיתוח של Chrome קיבלה תמיכה ב-Blob ב-IndexedDB.

זו תכונה שבה חיכו זמן רב ב-Chrome. התכונה הזו מאפשרת ל-IndexedDB API לאחסן ולאחזר Chromium בלי להמיר אותו למחרוזת Base64.

IndexedDB מספק אחסון קבוע מסוג מפתח-ערך בקנה מידה גדול שזמין ברוב הדפדפנים המודרניים (נראה ש-Safari יתמוך ב-iOS8 וב-Mac OS X 10.10). כדאי לבדוק את סטטוס ההטמעה שלה.

blob הוא אובייקט בינארי דמוי-קובץ שמנועי JavaScript מודרניים יכולים לטפל בו. אובייקטים של קבצים יורשים מ-Blob. אפשר גם לאחזר תמונות וקבצים כ-Blob באמצעות XMLHttpRequest. כדאי לבדוק את סטטוס ההטמעה שלה.

אחסון בועה ב-IndexedDB

אין דרך לזהות את זמינות התוסף ב-IndexedDB. בגדול, צריך לנסות לתפוס ואז להשתמש במחרוזת במקום ב-Blob אם היא לא זמינה. הנה קוד לדוגמה:

// Create an example Blob object
var blob = new Blob(['blob object'], {type: 'text/plain'});

try {
    var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

    // Store the object  
    var req = store.put(blob, 'blob');
    req.onerror = function(e) {
        console.log(e);
    };
    req.onsuccess = function(event) {
        console.log('Successfully stored a blob as Blob.');
    };
} catch (e) {
    var reader = new FileReader();
    reader.onload = function(event) {
        // After exception, you have to start over from getting transaction.
        var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

        // Obtain DataURL string
        var data = event.target.result;
        var req = store.put(data, 'blob');
        req.onerror = function(e) {
            console.log(e);
        };
        req.onsuccess = function(event) {
            console.log('Successfully stored a blob as String.');
        };
    };
    // Convert Blob into DataURL string
    reader.readAsDataURL(blob);
}

תמיכה ב-Blob ל-IndexedDB כבר זמינה גם ב-Firefox וב-Internet Explorer. יש לבדוק את התמיכה ב-Safari.

צפייה מהנה!