6

Bài đăng đầu tiên của tôi tại đây =].Cài đặt tiện ích mở rộng của ChromeThời gian không hoạt động đúng

Tôi đang tạo tiện ích mở rộng chrome và tôi đang sử dụng một setTimeout đệ quy. Tôi nhận thấy rằng nếu tôi đặt nó lên đến 13 giây, nó hoạt động, nhưng nếu tôi đặt nó đến 14 giây + nó sẽ không hoạt động.

Đây là một ví dụ mà là trên background.js tôi

function start() { 

    var timeout = setTimeout(function() { start(); }, 1000*15); 
    alert('test'); 
} 

chrome.webNavigation.onCompleted.addListener(function(o) { 

    start(); 

    }, { 
     url: [ 
     {urlContains: 'http://www.example.com/in.php'}, 
     {urlContains: 'http://www.example.com/out.php'} 
     ] 
    } 
); 

Nếu bạn giảm thời gian chờ mà đến 1000 * 13, nó hoạt động.

Đây là manifest.json tôi

{ 
    "name": "Extension", 
    "version": "0.0.7", 
    "manifest_version": 2, 
    "description": "Keeps proxy session alive", 
    "homepage_url": "http://www.example.com", 
    "icons": { 
    "16": "icons/icon16-on.png", 
    "48": "icons/icon48-on.png", 
    "128": "icons/icon128-on.png" 
    }, 
    "default_locale": "en", 
    "background": { 
    "scripts": [ 
     "src/bg/background.js" 
    ], 
    "persistent": false 
    }, 
    "browser_action": { 
    "default_icon": "icons/icon19.png", 
    "default_title": "Example - Off", 
    "default_popup": "" 
    }, 
"permissions": [ 
    "webNavigation", 
    "*://*/*", 
    "https://*/*" 
    ] 
} 

Bất kỳ ý tưởng về những gì có thể gây oddness này? Tôi đang thử nghiệm điều này trên chế độ nhà phát triển, BTW.

Cảm ơn trước!

EDIT

Mã cố định:

manifest.json

tôi thêm "báo động" cho phép

background.js

Added thi sự kiện để lắng nghe những alarms.create:

chrome.alarms.onAlarm.addListener(function(alarm){ 
    start(); 
}); 

thay thế chức năng setTimeout với dòng dưới đây

chrome.alarms.create("Start", {periodInMinutes:1}); 

Hope this helps!

Trả lời

12

Tôi nghi ngờ sự cố có thể xảy ra với việc tạm ngưng tự động trang sự kiện sau một thời gian không hoạt động. Trên máy của tôi, onSuspend dường như được gọi sau ~ 10 giây.

https://developer.chrome.com/extensions/event_pages#lifetime ghi chú rằng

Khi trang sự kiện đã nhàn rỗi trong một thời gian ngắn (một vài giây), sự kiện runtime.onSuspend là phái. Trang sự kiện có thêm một số ít hơn giây để xử lý sự kiện này trước khi sự kiện đó bị bốc dỡ.

Vì vậy, điều đó có thể giúp bạn có thêm khoảng 13 giây trước khi trang thực sự được tải xuống (cung cấp cho bạn một số thời gian dọn dẹp trong onSuspend, tôi nghĩ). Sau đó, trang của bạn được tải xuống và mã được khởi tạo từ đó không còn chạy nữa.

https://developer.chrome.com/extensions/event_pages#transition nói để sử dụng alarms api cho trang sự kiện thay vì setTimeout.

+0

Vâng !! Tại chỗ trên!! Làm tốt! Tôi sẽ bỏ phiếu cho điều này một khi tôi có đủ danh tiếng. Cám ơn nhiều, ông bạn. – badcom

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