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