2009-11-19 31 views
13

Tôi đang phát triển tiện ích trong Chrome 4 (hiện tại là 4.0.249.0) sẽ hiển thị danh sách StackOverflow/SuperUser/ServerFault của người dùng trên thanh trạng thái. Tôi đã thiết kế một trang tùy chọn để lấy các ID hồ sơ của người dùng và tôi lưu chúng vào localStorage và đọc chúng trong phần mở rộng. Tất cả đều hoạt động tốt.
Vấn đề là tôi không thể tìm thấy cách (có lập trình) để làm mới phần mở rộng khi lưu tùy chọn. Tôi đã thử gọi số location.reload(); từ trang tiện ích mở rộng khi nhấp chuột phải - không có kết quả. Tôi theo đuổi nó hơn nữa và cố gắng nhìn vào những gì trang chrome://extensions/ Chrome không để lại một phần mở rộng, và tìm thấy mã này:Làm cách nào để làm mới/tải lại Tiện ích mở rộng của Chrome?

/** 
* Handles a 'reload' button getting clicked. 
*/ 
function handleReloadExtension(node) { 
    // Tell the C++ ExtensionDOMHandler to reload the extension. 
    chrome.send('reload', [node.extensionId]); 
} 

Sao chép mã này vào xử lý sự kiện của tôi không giúp (và vâng, tôi đã cố gắng thay thế [node.extensionId] với mã thực tế). Ai đó có thể vui lòng giúp tôi làm điều này đúng không, hoặc chỉ cho tôi một mã mở rộng thực hiện điều này một cách chính xác? Sau khi hoàn thành, tôi sẽ đặt phần mở rộng và nguồn của nó lên trên blog của tôi.

Trả lời

5

Chức năng chrome.send không thể truy cập được bằng mã javascript của tiện ích, các trang như trang newtab, lịch sử và trang tiện ích sử dụng nó để giao tiếp với mã bộ điều khiển C++ cho các trang đó.

Bạn có thể cập nhật tiện ích của mình cho người dùng đã cài đặt tiện ích mở rộng này, điều này được mô tả here. Ứng dụng của người dùng sẽ được cập nhật sau khi khoảng thời gian tự động cập nhật hoặc khi họ khởi động lại trình duyệt. Tuy nhiên, bạn không thể tải lại phần mở rộng của người dùng theo chương trình. Tôi nghĩ rằng đó sẽ là một nguy cơ bảo mật.

+0

Cảm ơn Pierre. Giải quyết vấn đề của tôi bằng cách cảnh báo người dùng nhấp vào tiện ích mở rộng của tôi, điều này gây ra việc vẽ lại. –

+5

câu hỏi này là cũ, nhưng bây giờ bạn có thể kích hoạt tải lại các tiện ích nếu bạn có quyền truy cập vào [API quản lý tiện ích mở rộng] (http://code.google.com/chrome/extensions/management.html) – gengkev

+0

rủi ro bảo mật? thay vào đó, chúng tôi có trải nghiệm nhà phát triển kém. – bartek

2

window.location.reload() làm việc cho tôi

Tôi đang sử dụng crom 6.x nên nó có thể được cố định trong phiên bản mới hơn

+0

bạn đã đặt cái này ở đâu? – knoopx

+3

Tôi đã sử dụng nó trong background.js của mình. Nhưng bạn cũng có thể sử dụng nó từ chế độ xem của mình: chrome.extension.getBackgroundPage(). Window.location.reload() – Marek

+0

Trang nền là một trang "afterall". – RayfenWindspear

31

Bây giờ cách đơn giản nhất để làm cho phần mở rộng cho tải lại bản thân là để gọi chrome.runtime.reload(). Tính năng này không cần bất kỳ quyền nào trong tệp kê khai. Để tải lại thêm sử dụng tiện ích mở rộng chrome.management.setEnabled(). Nó yêu cầu "quyền": ["quản lý"] trong tệp kê khai.

+0

điều này phải được chấp nhận trả lời – ALTN

+0

câu trả lời được chấp nhận! – NikosKeyz

3

Tôi vừa gặp vấn đề tương tự với an extension.

Tắt, bạn có thể nghe các thay đổi bộ nhớ trong phạm vi background.js bằng cách sử dụng chrome.storage.onChanged và yêu cầu thực hiện logic làm mới.

Ví dụ:

// Perform a reload any time the user clicks "Save" 
chrome.storage.onChanged.addListener(function(changes, namespace) { 
    chrome.storage.sync.get({ 
    profileId: 0 
    }, function(items) { 

    // Update status bar text here 

    }); 
}); 

Bạn cũng có thể tải lại phần gia hạn của bạn theo cách này bằng cách lấy thông số changes vào tài khoản. chrome.runtime.reload() có thể dễ dàng hơn, nhưng điều này có ít chi phí hơn.

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