Firefox блокирует загрузку ресурсов на себя («script-src») - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь создать расширение для дел для Firefox, и мне нужно вызвать функцию при нажатии кнопки удаления (строка 8).

function viewPrevious(){
  var prom = browser.storage.sync.get(null);
  prom.then((res) => {
    var text = '<ul class="list-group list-group-flush">';
    var i;
    for (i = 0; i < res.todos.length; i+=4) {
      text+='<ul class="list-group list-group-flush"><li class="list-group-item">'+res.todos[i]+'   '+res.todos[i+1]+'   '+res.todos[i+2]+'</li>';
      text+='<button type="button" class="btn btn-primary" onClick="myFunc" id='+i+'">Delete</button>';
    }
    text+='</ul>';
    document.getElementById("oldTodos").innerHTML = text;
    window.onload=function(){
      console.log("KKOO");
      var promii = browser.storage.sync.get(null);
      promii.then((res) => {
        for(i=0;i<res.todos.length;i+=4){
          console.log("redda");
          document.getElementById(i.toString()).addEventListener('click',function(){
            console.log('kjk'+i);
            var removingItem = browser.storage.sync.remove(i);
            removingItem.then(function(){
              viewPrevious();
            });
          });
        }
      });
    }
  });
}

Я добавил onClick = "myFunc "в строке 8 и функция,

function myFunc(){
  console.log("ABC");
}

, когда я запускаю это и нажимаю кнопку, это дает мне следующую ошибку

Content Security Policy: The page’s settings blocked the loading of a resource at self (“script-src”). Source: onclick attribute on BUTTON element.

Я пытался использовать мета-теги и давать script-src 'unsafe-inline', но это тоже не сработало.И у меня нет хорошей идеи об этом content security policy

Есть ли другой способ сделать эту работу, или я делаю что-то не так?

1 Ответ

0 голосов
/ 22 мая 2018

Ваша проблема здесь - атрибут HTML onclick.Чтобы сделать это правильно, вам нужно использовать addEventListener, как вы используете прослушиватель, который щелкает позже.

// Untested, but it should put you on the correct path
var ul = document.createElement('ul');
ul.classList.add('list-group', 'list-group-flush');

var i;
for (i = 0; i < res.todos.length; i+=4) {
    // I'm ignoring <ul class="list-group list-group-flush"> from your example, because
    // this doesn't look like you intend to be nesting lists
    var li = document.createElement('li';
    li.classList.add('list-group-item');

    // In your example, you had left an open XSS vulnerability by simply
    // concatenating user todos with your markup, textContent is much safer
    li.textContent = res.todos[i]+'   '+res.todos[i+1]+'   '+res.todos[i+2];
    ul.appendChild(li);

    var button = document.createElement('button');
    button.classList.add('btn', 'btn-primary');
    button.addEventListener('click', myFunc);
    button.id = i;

    ul.appendChild(button);
}
document.getElementById("oldTodos").innerHTML = '';
document.getElementById("oldTodos").appendChild(ul);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...