我想构建一个Google Chrome扩展程序,以便在Chrome中同步我的所有书签,因此我已将事件监听器附加到onCreated;
chrome.bookmarks.onCreated.addListener(function (id, bookmark) {
console.log('Hey bookmark created ' + id);
});
这个想法是当用户创建一个新书签时,这个onCreated
事件监听器通过一个AJAX请求向服务器发送一个JSON对象,说明已经创建了一个书签。
如果服务器然后返回一个JSON对象,该对象指示应该在浏览器上创建新书签,我不需要执行onCreated
事件监听器。
基本上,我们的想法是,只有在用户手动创建书签且以编程方式 时才会触发事件侦听器。
例如,如果使用以下命令创建书签,则不应执行事件侦听器;
chrome.bookmarks.create({
parentId: '648',
title: 'Google Folder'
});
答案 0 :(得分:2)
如果我理解正确,您希望能够在以编程方式创建书签时暂停chrome.bookmarks.onCreated
。由于Chrome API没有提供删除事件监听器的方法,只是添加了。
我会尝试进行一些全局切换:
var listenerEnabled = true;
chrome.bookmarks.onCreated.addListener(function (id, bookmark) {
if(listenerEnabled) {
console.log('Hey bookmark created ' + id);
}
});
function createBookmark() {
listenerEnabled = false;
chrome.bookmarks.create({parentId: '648',title: 'Google Folder'}, function() {
//enable with delay in case listener fires late
setTimeout(function() {
listenerEnabled = true;
}, 500);
});
}
另一种方法是以编码方式标记书签(例如,通过在标题中附加内容),然后在侦听器中,您可以检测它们并删除此标记。
答案 1 :(得分:0)
我不确定您为什么要阻止用户手动添加书签。
如果您想让浏览器的书签与服务器保持同步,那么您应该只需要确保以下内容;
Chrome已经阻止用户创建两次书签,因此您不需要执行此检查,但只会通知您的服务器,如果该数据库中尚不存在,则应将其添加到数据库中。
书签同步相对简单,但您需要在尝试编写此代码之前将您的用例和逻辑写在纸上,否则它将无法成功。
积分1&可以通过定期检查服务器的更新来管理2。您已经介绍过的第3点,但服务器需要执行逻辑而不是扩展。
答案 2 :(得分:0)
虽然上述解决方案可行,但Google团队的Boris Smus发现了另一种做同样事情的方法:
var myListener = function(...) {...};
chrome.bookmarks.onCreated.addListener(myListener);
// Remove temporarily
chrome.bookmarks.onCreated.removeListener(myListener);
// Add again...
当您需要以编程方式创建书签/文件夹时,这将删除侦听器,并在您准备好后重新添加它。
我刚刚在我的代码中测试并使用了此解决方案。非常感谢Boris Smus,
https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/chromium-extensions/fKYpINyqs1k
最好能够执行不触发事件的程序化创建,或者更确切地说能够仅将事件附加到用户特定的操作。但是,这里的解决方案现在可以做到。