2011-11-01 39 views
7

Tôi có một manifest.json tập tin đó trông như thế này:Tại sao chrome.extension.getBackgroundPage() trả về null?

{ 
    "name": "Zend Debugger Extension", 
    "version": "0.1", 
    "background_page": "background.html", 
    "permissions": [ 
    "cookies", "tabs", "http://*/*", "https://*/*" 
    ], 
    "browser_action": { 
    "default_title": "Launch Zend Debugger", 
    "default_icon": "icon.png", 
    "popup": "popup.html" 
    } 
} 

Dưới đây là tôi background.html:

<html> 
    <script> 
    function testRequest() { 
     console.log("test Request received"); 
    } 
    </script> 
</html> 

popup.html tôi:

<script> 
function debug(target) { 
    if (target.id == 'thisPage') { 
     console.log('sending request'); 
     chrome.extension.getBackgroundPage().testRequest(); 
    } 
} 
</script> 

<div onclick="debug(this)" id="thisPage">Current Page</div> 

Tuy nhiên, số background.html trang dường như không thể truy cập được. Tôi gặp phải lỗi này:

Uncaught TypeError: Cannot call method 'testRequest' of null 

Khi tôi kiểm tra chrome.extension.getBackgroundPage() Tôi nhận được giá trị null. Tôi nghĩ rằng tôi đã mắc lỗi trong tệp kê khai của mình, nhưng tôi không thể nhìn thấy những gì tôi đã làm sai.

Cảm ơn.

Trả lời

1

Bạn đang thiếu sự cho phép nền, hãy nhìn vào tệp manifest.json của tôi về mở rộng chrome của tôi:

{ 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["jquery.js", "asserts.js"] 
    } 
    ], 
    "name": "Test Extension", 
    "version": "1.0", 
    "description": "A test extension to inject js to a webpage.", 
    "background_page": "background.html", 
    "options_page": "options.html", 
    "browser_action": { 
    "default_icon": "icon.png", 
    "popup": "popup.html" 
    }, 
    "permissions": [ 
    "tabs", 
    "http://*/*", "https://*/*", "<all_url>", "background" 
    ] 
} 

EDIT: Bạn có chắc chắn bạn có các tập tin background.html vào thư mục tương tự như tất cả các tệp của tiện ích mở rộng chrome của bạn ?, và nếu có, hãy thử tải lại tiện ích mở rộng của bạn từ trang quản lý tiện ích mở rộng, tôi nhớ một lần có lỗi mà tiện ích mở rộng của tôi không tải lại, vì vậy tôi đã chuyển đến công cụ của nhà phát triển cho trang nền của mình và thực hiện window.location.reload(true); từ bảng điều khiển, đã sửa nó. Xin trả lời nếu điều này làm việc, tôi sẽ tiếp tục nghiên cứu

+0

Tôi đã cố gắng thêm sự cho phép nền nhưng vẫn nhận được null khi cố gắng chrome.extension.getBackground () và cùng một lỗi khi tập lệnh chạy. Tôi thực sự nghĩ rằng sự cho phép nền liên quan đến việc phần mở rộng vẫn chạy trong nền khi tất cả các tab được đóng lại: http://code.google.com/chrome/extensions/manifest.html#permissions – AntBrown

+0

Bạn có chắc chắn rằng bạn có nền. tệp html trên cùng thư mục với tất cả các tệp của tiện ích mở rộng chrome của bạn ?, nếu có, hãy thử tải lại tiện ích của bạn từ trang quản lý tiện ích mở rộng, tôi nhớ một lần có lỗi mà tiện ích của tôi không tải lại, vì vậy tôi đã chuyển đến công cụ của nhà phát triển cho trang nền của tôi và thực thi window.location.reload (true); từ bảng điều khiển, đã sửa nó. Xin vui lòng trả lời nếu điều này làm việc, tôi sẽ tiếp tục nghiên cứu. – ElHacker

+0

Tải lại tiện ích mở rộng đã sửa lỗi getBackgroundPage() = null. Cảm ơn bạn. – AntBrown

2

Đây là một câu trả lời với nhiều lựa chọn hơn:

chrome.extension.getBackgroundPage() returns null after awhile

According to the referenced page (Difference between Event and Background Page) there is a better option to get the background while still using Event Page :

If your extension uses, extension.getBackgroundPage, switch to runtime.getBackgroundPage instead. The newer method is asynchronous so that it can start the event page if necessary before returning it.

+0

Trong khi đúng, đây là một câu hỏi rất, rất cũ mà phải làm với bản kê khai phiên bản 1, trước khi trang sự kiện là một điều. – Xan

+0

Times có thể đã thay đổi nhưng đã giúp tôi đi đúng hướng! –

Các vấn đề liên quan