2016-12-09 2 views
-2

Я работаю над расширением и хотел бы изменить popup.html из моих Background.js ...Может ли действие браузера активировать действие и открыть всплывающее окно одновременно?

здесь является участие в background.js

 popup=chrome.extension.getViews({type:"popup"}); 
     html2="Hello World 2";  
     window.onload=function(){popup[0].document.innerHTML="Hello World 2"}; 
    } 
} 
+0

Не могли бы вы предоставить нам всю ошибку, включая номер строки? –

+0

Uncaught TypeError: Не удается прочитать документ 'документа' неопределенного (...) background.js строки 20 – Eminem347

+0

В какой строке он указывает? –

ответ

0

Согласно documentation, значок browserAction может либо иметь действие вызвало ИЛИ всплывающее окно открытое, но не оба одновременно. Вы можете переключаться между одним или другим программным способом, но никогда не работать одновременно.

Слушатель определяется в chrome.browserAction.onClicked.addListener будет НЕ назвать, если у вас есть popup.html определенный файл в манифесте.

С другой стороны, если вы хотите программно изменить HTML всплывающего окна, вы можете сделать это, только если всплывающее окно открыто, поэтому вы либо включаете код в файл popup.js, либо используете chrome.runtime.getBackgroundPage для доступа к объекту фонового окна и вызова кода, который у вас уже есть.

Например:

background.js

var $username = "noname", $password;  

function modifyMyPopup(){ 
    var popup = chrome.extension.getViews({type:"popup"}); //get the open popup windows 
    for (var i = 0; i < popup.length; i++) //check all open popups 
     if (popup[i].popupMarker) //if it is our browserAction popup... 
      popup[i].document.body.innerHTML = "Hello" + $username; //modify its body's innerHTML 
} 

chrome.storage.sync.get(["username","password"],function(items){ //you can get several items at once from the storage 
    $username = items.username; 
    $password = items.password; 
}); 

popup.html

<html> 
<head> 
<script src="popup.js" defer></script> 
</head> 
<body> 
Goodbye! 
</body> 
</html> 

popup.js

var popupMarker = 1;  
chrome.runtime.getBackgroundPage(function(bgPage){ 
    bgPage.modifyMyPopup(); 
}); 
+1

Пока вы рассмотрели наиболее вероятные потому что у нас нет полного [mcve] из OP, вам также нужно учитывать возможность того, что OP отдельно открыл всплывающее окно, которое не является всплывающим окном браузера. – Makyen

+0

@Makyen уверен, что это – Eminem347

+0

@Makyen Спасибо, я отредактировал вопрос – Eminem347

-1

popup не определяют в вашем else. Вы должны сделать это снаружи, если другое заявление, как это:

popup = chrome.extension.getViews({type:"popup"}); 

if (typeof $username === 'undefined') { 
    window.onload = function(){popup.document.innerHTML = "Hello World"}; 
} else { 
    window.onload = function(){popup.document.innerHTML = "Hello Wolrd 2"}; 
} 
+0

Да, это изменило ту же ошибку ---
background.js: 20 Uncaught TypeError: Не удается прочитать свойство «innerHTML» неопределенного (...) window.onload @ background.js: 20 – Eminem347

+1

Просмотрите [documentation] (https://developer.chrome.com/extensions/extension#method-getViews): chrome.extension.getViews возвращает массив, а не объект окна. –

+0

Возвращает массив объектов «окна» JavaScript для каждой из страниц, работающих внутри текущего расширения .... @ IvánNokonoko – Eminem347