0

Я работаю над небольшим расширением хром. Здесь я хочу:Как получить все элементы из хромового хранилища

1) Когда пользователь нажимает на мое расширение, текущий URL-адрес вкладки будет сохранен в локальном хранилище браузера. Использую следующий код для этого:

**popup.html** 
    <body> 
    <input type="url" id="urlfield" value=""> 
    <button class="submit">Save</button> 
    <script src="popup.js"></script> 
    </body> 

    **popup.js** 
    var storage = chrome.storage.local; 
    chrome.tabs.query({'active': true}, function (tabs) { 
    var url = tabs[0].url; 
    document.getElementById('urlfield').value = res; 
    }); 

    var submitButton = document.querySelector('button.submit'); 
    submitButton.addEventListener('click', saveChanges); 

    function saveChanges() { 
    var result=document.getElementById('urlfield').value ; 
    if (!result) { 
    message('No Url specified'); 
    return; 
    } 

    // Save it using the Chrome extension storage API. 
    storage.set({'urlname': result}, function(all) { 
    // Notify that we saved. 
    //alert(result); 
    }); 

Это прекрасно работает.

2) Теперь я пытаюсь отобразить все URL-адреса, хранящиеся в локальном хранилище, на странице параметров как iframe. Am, используя следующий код, чтобы сделать это:

**options.html** 
<body> 
<iframe id="link" src=""></iframe> 
<script type="text/javascript" src="options.js"></script> 
</body> 

**options.js** 
var storage = chrome.storage.local; 
loadChanges(); 

function loadChanges() { 
storage.get(null, function(items) { 
document.getElementById('link').src =items.urlname; 
}); 
} 

Сверху только один URL отображает, как фрейм. Я хочу отобразить все URL-адреса, сохраненные в хранилище. Можете ли вы предложить мне, как получить все содержимое из хранилища.

ответ

1

Использование storage.set({'urlname': result} сохраняет result под ключ urlname в storage.local и перезаписывает предыдущее значение, сохраненное под тем же ключом.

Если вы хотите сохранить список URL-адресов, вы можете сохранить их в массиве:

function saveChanges() { 
    ... 
    // Save it using the Chrome extension storage API. 
    // First fetch the array of saved URLs 
    storage.get({ urlList: [] }, function (items) { 
     // Push the new URL in it. 
     // You should also check that it is not already saved. 
     items.urlList.push(result); 


     // Save the array back 
     storage.set({ urlList: items.urlList }, function() { 
      if (chrome.runtime.lastError) { 
       alert('ERROR: ' + chrome.runtime.lastError.message); 
      } else { 
       alert('Operation completed successfully !'); 
      } 
     }); 
    }); 
} 

function loadChanges() { 
    // Retrieve the whole list 
    storage.get({ urlList: [] }, function (items) { 
     // Process the URLs one-by-one 
     for (var i = 0; i < items.urlList.length; i++) { 
      var url = items.urlList[i]; 
      // Do something with this URL, e.g. create an iframe: 
      var iframe = document.createElement('iframe'); 
      iframe.src = url; 
      document.body.appendChild(iframe); 
     } 
    }); 
} 
+0

Я использовал свое решение следующим образом:. Document.getElementById («ссылка») SRC = URL; для отображения каждого URL как iframe, но все же он показывает только один iframe. Я что-то делаю неправильно? – ggbhat

+0

Да. У вас есть только один iframe и просто измените URL-адрес, который отображается в этом iframe. Пожалуйста, см. Мой обновленный ответ. – gkalpak

+0

Спасибо !, Он работает. Используя javascript appendChild, он показывает ошибку DOM Undefined. Используемый jquery для добавления дочернего файла для меня работал. – ggbhat

Смежные вопросы