2013-12-13 28 views
5

Arka plandan pop-up'a bir değişken geçiren basit bir uzantı oluşturmak istiyorum. Sorun şu ki, 'tanımlanmamış' yanıt alıyorum.Chrome uzantısında arka plandan pop-up'a geçiş değişiyor

Bildirim:

{ 
    "name": "Get var", 
    "description": "get var", 
    "version": "2.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "browser_action": { 
    "default_title": "Get that variable", 
    "default_popup": "popup.html" 
    }, 
    "manifest_version": 2 
} 

background.js

var myURL = 'aaa'; 

popup.html

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

popup.js

document.addEventListener('DOMContentLoaded', function() { 
    var bg = chrome.extension.getBackgroundPage(); 
    var myURL = bg.myURL; 
    alert(myURL) 

}); 
+0

'window.myURL =' aaa ';' i çalıştıran background.js – rsanchez

cevap

-2

Sonunda sorunu buldum, arka plan sayfalarını okumak için arkaplan iznine ihtiyacım var okudum (chrome extension permissions documentation here). Bu nedenle, şu şekilde tezahür ettim:

{ 
    "name": "Get var", 
    "description": "get var", 
    "version": "2.0", 
    "permissions": [ 
    "activeTab,background" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "browser_action": { 
    "default_title": "Get that variable", 
    "default_popup": "popup.html" 
    }, 
    "manifest_version": 2 
} 
+3

Arka plan sayfaları kesinlikle ** çalışmak için 'background' iznine ihtiyaç duymaz. 'Arka plan' izni, aşağıdaki bağlantıyı yaptığınız belgelerde açıkça belirtildiği üzere, çok farklı bir amaç için geçerlidir: Yüklü herhangi bir barındırılan uygulama, paketlenmiş uygulama veya uzantının "arka plan" iznine sahip olduğu durumlarda, Chrome, kullanıcı günlükleri kaydedilir yapılmaz (görünmez) çalışır kullanıcı, Chrome'u kullanıma sunmadan önce bilgisayarlarına. "Arka plan" izni, Chrome'un kullanıcı tarafından Chrome._ – gkalpak

+1

BTW'yi açıkça bırakana kadar (son pencerenin kapatılmasından sonra bile) çalışmaya devam etmesini sağlar (eğer arka planda çalışırsanız). Kendinizi (ve kendimizi) bir süre kaydetmek için soru;) – gkalpak

+0

Hiçbir şey değiştirdim ama bir arka plan izni ekledi ve çalıştı. İstediğim şey, bir şekilde çalışmasını sağlamaktı :) – Kuzgun

8

Kodunuz (tam olarak sizin sorunuzda gönderdiğiniz gibi) doğru ve iyi çalışmalı. (Aslında, sağladığınız kodu kullanarak örnek bir uzantı oluşturduğumda, beklendiği gibi çalıştım.)
Gerçek kodu kopyalayıp yapıştırarak ya da başka bir şeyle uğraşırken (ya da başka bir şeyden vazgeçtiğinizde) yanlışlıkla bir şeyleri değiştirdiniz. senin gönderin).


BTW, daha kaynak dostu olan event-pages içine (yani kalıcı olmayan arka plan sayfalarını) araştırılmasını önermektedir olacaktır. Ben herhangi bir şekilde yok sen undefined almak nedeni olduğunu ima:

document.addEventListener('DOMContentLoaded', function() { 
    chrome.runtime.getBackgroundPage(function (bg) { 
     var myUrl = bg.myUrl; 
     alert(myUrl); 
    }); 
}); 

Not: Kod çalışmak için bir olay sayfaya geçmeden için bazı değişiklikler yapılmasını gerektirecek, unutmayın Kalıcı bir arka sayfa kullandığınız. Gönderdiğiniz kod, kalıcı bir arkaplan sayfasıyla düzgün çalışmalıdır. Bu, bir etkinlik sayfası (mümkün olduğunda) kullanmak için daha iyi bir uygulamadır.

0

Benzer bir sorunla karşılaştım; Sorunum, bildirimi değiştirdikten sonra uzantıyı yeniden yüklemediğimdi.

OP'nin sorununun aynı olduğunu tahmin ediyorum.

İlgili konular