2015-08-29 3 views
9

Мое расширение chrome не использует content_scripts, потому что я не хочу вводить код на каждую страницу. Вместо этого, когда пользователь нажимает на кнопку, открывается всплывающее окно и вводит код на страницу.Разрешение на расширение Chrome для «about: blank» страница

Так, в manifest.json есть разрешения блока:

"permissions": [ 
    "activeTab" 
] 

И в popup.js есть этот код:

chrome.windows.getCurrent(function(win) { 
    chrome.tabs.query({ 
     'windowId': win.id, 
     'active': true 
    }, function(tabArray) { 

     // inject css & js only on initial click 
     chrome.tabs.executeScript(null, { 
      code : 'document.querySelector("body").classList.contains("_myExtension_code_injected")' 
     }, function(result) { 
      if (result && !result[0]) { 
       chrome.tabs.insertCSS(null, { 
        file: 'myExtension.css' 
       }); 

       chrome.tabs.executeScript(null, { 
        file: 'myExtension.js' 
       }, function(){ 
        chrome.tabs.executeScript(null, { 
         code: 'myExtension.init();' 
        }); 
       }); 
      } 
     }); 

    }); 
}); 

Проблема некоторые веб-сайты, открыть всплывающее окно с дополнительными Информация. И URL-адрес этой всплывающей страницы - "about:blank". Если я пытаюсь инициализировать расширения, я вижу это сообщение в консоли:

Unchecked runtime.lastError во время работы tabs.executeScript: Не удается получить доступ к URL содержимого «о: пустой». Расширительный манифест должен запрашивать разрешение на доступ к этому хосту.

Я не вижу способа добавить страницу "about:blank" к permissions. И я действительно не хочу начинать использовать content_scripts, чтобы установить match_about_blank.

Я попытался добавить "about:blank" и "about:* в permission, и все, что я получаю, является ошибкой установки.

Были предупреждения при попытке установить это расширение: Разрешения «о *» неизвестен или URL шаблон имеет неверный формат.

Есть ли решение?


Обновление: Here is a gist with everything you'll need. Была добавлена ​​ссылка на демонстрационную версию jsbin, но проблема не в том, что сайт специально. Первоначально расширение было протестировано на всплывающем окне почты yahoo, которое вы получаете, выбирая печать электронной почты.

+0

Разве вы не можете просто проверить 'windows.location.href' значение против' о: blank' перед выполнением какого-либо кода? – Mathlight

+0

Хром предотвращает инъекцию кода, потому что ему требуется разрешение. Я включил ошибку, показанную выше. – Mottie

+0

Я понимаю это часть. Но я имел в виду, если возможно, поставить чек вокруг инъекционной части. (Я не знаю, насколько это возможно, если это возможно) – Mathlight

ответ

4

Попробуйте использовать chrome.tabs.executeScript({ file: "script.js", matchAboutBlank: true })

«Если matchAboutBlank верно, то код также вводится в о: пустой и о:. Srcdoc кадров, если ваше расширение имеет доступ к своему родительскому документу код не может быть вставлена ​​в верхнем уровне about: -frames. По умолчанию это false. "

https://developer.chrome.com/extensions/tabs#property-details-matchAboutBlank

+0

Спасибо! Я полностью пропустил это в документации. К сожалению, даже после добавления этого параметра я все еще вижу одно и то же сообщение об ошибке. – Mottie

+0

Возможно, проблема заключается в том, что всплывающая страница «about: blank» не отображается как вкладка, поэтому я должен щелкнуть правой кнопкой мыши по заголовку и выбрать «Показать как вкладку», чтобы отобразить кнопку расширения. – Mottie

+0

Возможно, проблема заключается в доступе к родительской части документа. –

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