Google chrome chrome.omnibox在一段时间后停止工作。重新启动扩展后开始工作

Google chrome chrome.omnibox在一段时间后停止工作。重新启动扩展后开始工作,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我在扩展中利用谷歌浏览器 包括我在内的当前用户已经注意到,omnibox在未确定的状态变化或一段时间的重叠后完全停止响应。输入要触发的单词进入“omnibox”将停止任何效果,并且URL栏不会切换到omnibox模式 重新启动Google Chrome并不能解决这个问题,但是通过取消选中并重新选中“已启用”复选框来重新启动我的插件chrome://extensions 这确实解决了问题 有人对调查什么有什么建议吗?下面是使用的代码。它仅通过永久保存的背景页面加载一次: // Displays

我在扩展中利用谷歌浏览器

包括我在内的当前用户已经注意到,omnibox在未确定的状态变化或一段时间的重叠后完全停止响应。输入要触发的单词进入“omnibox”将停止任何效果,并且URL栏不会切换到omnibox模式

重新启动Google Chrome并不能解决这个问题,但是通过取消选中并重新选中“已启用”复选框来重新启动我的插件chrome://extensions 这确实解决了问题

有人对调查什么有什么建议吗?下面是使用的代码。它仅通过永久保存的背景页面加载一次:

//  Displays streamus search suggestions and allows instant playing in the stream
define([
    'background/collection/streamItems',
    'background/model/video',
    'common/model/youTubeV2API',
    'common/model/utility'
], function (StreamItems, Video, YouTubeV2API, Utility) {
    'use strict';

    console.log("Omnibox LOADED", chrome.omnibox);

    var Omnibox = Backbone.Model.extend({

        defaults: function () {
            return {
                suggestedVideos: [],
                searchJqXhr: null
            };
        },

        initialize: function () {
            console.log("Omnibox INITIALIZED");
            var self = this;

            chrome.omnibox.setDefaultSuggestion({
                //  TODO: i18n
                description: 'Press enter to play.'
            });

            //  User has started a keyword input session by typing the extension's keyword. This is guaranteed to be sent exactly once per input session, and before any onInputChanged events.
            chrome.omnibox.onInputChanged.addListener(function (text, suggest) {

                //  Clear suggested videos
                self.get('suggestedVideos').length = 0;

                var trimmedSearchText = $.trim(text);

                //  Clear suggestions if there is no text.
                if (trimmedSearchText === '') {
                    suggest();
                } else {

                    //  Do not display results if searchText was modified while searching, abort old request.
                    var previousSearchJqXhr = self.get('searchJqXhr');

                    if (previousSearchJqXhr) {
                        previousSearchJqXhr.abort();
                        self.set('searchJqXhr', null);
                    }

                    var searchJqXhr = YouTubeV2API.search({
                        text: trimmedSearchText,
                        //  Omnibox can only show 6 results
                        maxResults: 6,
                        success: function(videoInformationList) {
                            self.set('searchJqXhr', null);

                            var suggestions = self.buildSuggestions(videoInformationList, trimmedSearchText);

                            suggest(suggestions);

                        }
                    });

                    self.set('searchJqXhr', searchJqXhr);
                }

            });

            chrome.omnibox.onInputEntered.addListener(function (text) {

                //  Find the cached video data by url
                var pickedVideo = _.find(self.get('suggestedVideos'), function(suggestedVideo) {
                    return suggestedVideo.get('url') === text;
                });

                //  If the user doesn't make a selection (commonly when typing and then just hitting enter on their query)
                //  take the best suggestion related to their text.
                if (pickedVideo === undefined) {
                    pickedVideo = self.get('suggestedVideos')[0];
                }

                StreamItems.addByVideo(pickedVideo, true);

            });

        },

        buildSuggestions: function(videoInformationList, text) {
            var self = this;

            var suggestions = _.map(videoInformationList, function (videoInformation) {

                var video = new Video({
                    videoInformation: videoInformation
                });
                self.get('suggestedVideos').push(video);

                var safeTitle = _.escape(video.get('title'));
                var textStyleRegExp = new RegExp(Utility.escapeRegExp(text), "i");
                var styledTitle = safeTitle.replace(textStyleRegExp, '<match>$&</match>');

                var description = '<dim>' + video.get('prettyDuration') + "</dim>  " + styledTitle;

                return {
                    content: video.get('url'),
                    description: description
                };
            });

            return suggestions;
        }
    });

    return new Omnibox();
});
//显示streamus搜索建议并允许在流中即时播放
定义([
“背景/集合/流项目”,
“背景/模型/视频”,
“通用/型号/youTubeV2API”,
“通用/型号/实用”
],函数(流项目、视频、YouTubeV2API、实用程序){
"严格使用",;
log(“Omnibox加载”,chrome.Omnibox);
var Omnibox=Backbone.Model.extend({
默认值:函数(){
返回{
建议视频:[],
searchJqXhr:null
};
},
初始化:函数(){
log(“Omnibox已初始化”);
var self=这个;
chrome.omnibox.setDefaultSuggestion({
//TODO:i18n
描述:“按enter键播放。”
});
//用户通过键入扩展的关键字启动了关键字输入会话。保证在每个输入会话中,以及在任何onInputChanged事件之前,只发送一次关键字输入会话。
chrome.omnibox.onInputChanged.addListener(函数(文本,建议){
//清除建议的视频
self.get('suggestedVideos')。长度=0;
var trimmedSearchText=$.trim(文本);
//如果没有文本,请明确建议。
如果(trimmedSearchText===''){
建议();
}否则{
//不显示结果如果搜索时修改了searchText,则中止旧请求。
var previousSearchJqXhr=self.get('searchJqXhr');
如果(以前的搜索jqxhr){
previousSearchJqXhr.abort();
self.set('searchJqXhr',null);
}
var searchJqXhr=YouTubeV2API.search({
文本:trimmedSearchText,
//Omnibox只能显示6个结果
最大结果:6,
成功:功能(视频信息列表){
self.set('searchJqXhr',null);
var建议=self.buildSuggestions(视频信息列表、trimmedSearchText);
建议;
}
});
self.set('searchJqXhr',searchJqXhr);
}
});
chrome.omnibox.onInputEntered.addListener(函数(文本){
//通过url查找缓存的视频数据
var pickedVideo=u2;.find(self.get('suggestedVideos'),函数(suggestedVideo){
返回suggestedVideo.get('url')==文本;
});
//如果用户未进行选择(通常在键入并在查询中按enter键时)
//采纳与他们的文本相关的最佳建议。
如果(pickedVideo==未定义){
pickedVideo=self.get('suggestedVideos')[0];
}
StreamItems.addByVideo(pickedVideo,true);
});
},
构建建议:功能(视频信息列表、文本){
var self=这个;
var建议=\映射(videoInformationList,函数(videoInformation){
var视频=新视频({
视频信息:视频信息
});
self.get('suggesteredvideos').push(video);
var safeTitle=551;.escape(video.get('title'));
var textStyleRegExp=newregexp(Utility.escapeRegExp(text),“i”);
var styledTitle=safeTitle.replace(textStyleRegExp,$&');
var description=''+video.get('prettyDuration')+''+styledTitle;
返回{
内容:video.get('url'),
描述:描述
};
});
返回建议;
}
});
返回新的Omnibox();
});
据我所知,代码本身很好,不会对我是否看到omnibox产生任何影响


您可以在这里找到完整的源代码:

我在我的一个扩展中看到了这一点,但有一段时间没有注意到。我正在运行Chrome beta频道,所以它可能会被修复。这似乎与我看到的一致。我在家里测试,在办公室稳定,我在办公室看到过,但从来没有在家看到过!