我有一个支持聊天的Google Chrome扩展程序.Chrome扩展程序显示桌面通知中发送给您的邮件.我注意到每当我从iPhone发送表情符号时,它都会在桌面通知中正确显示.但是当我尝试在实际应用程序中显示相同的表情符号时(它是一个注入页面的iframe),它显示为正方形.
好像https://code.google.com/p/chromium/issues/detail?id=62435上有一个漏洞.我想知道为什么它在桌面通知中正常工作而不是其他?还有,我能做些什么来解决它吗?
我有一个chrome扩展,它为每个打开的标签注入一个iframe.我在我的background.js中有一个chrome.runtime.onInstalled监听器,它按如下方式手动注入所需的脚本(这里有API的详细信息:http://developer.chrome.com/extensions/runtime.html#event-onInstalled):
background.js
var injectIframeInAllTabs = function(){
console.log("reinject content scripts into all tabs");
var manifest = chrome.app.getDetails();
chrome.windows.getAll({},function(windows){
for( var win in windows ){
chrome.tabs.getAllInWindow(win.id, function reloadTabs(tabs) {
for (var i in tabs) {
var scripts = manifest.content_scripts[0].js;
console.log("content scripts ", scripts);
var k = 0, s = scripts.length;
for( ; k < s; k++ ) {
chrome.tabs.executeScript(tabs[i].id, {
file: scripts[k]
});
}
}
});
}
});
};
Run Code Online (Sandbox Code Playgroud)
这在我第一次安装扩展时工作正常.我希望在更新扩展程序时也这样做.如果我也在更新时运行相同的脚本,我没有看到注入新的iframe.不仅如此,如果我尝试在更新后向我的内容脚本发送消息,则所有消息都不会进入内容脚本.我见过其他人也在SO上遇到同样的问题(Chrome:在runtime.onInstalled上的消息内容脚本).在chrome扩展更新后删除旧内容脚本和注入新内容脚本的正确方法是什么?
我将登录用户的数据从服务器导入名为"用户"的核心数据实体.我还将这个特定用户对象的引用保存到我的AppDelegate(作为属性),以便我可以在我的应用程序的其他位置访问它.我面临的问题是,当我推送另一个视图控制器并尝试访问appdelegate.loggedInUser.id时,我看到"id"为零.调试器为对象显示以下内容:
$24 = 0x0b28ad30 <User: 0xb28ad30> (entity: User; id: 0xb261160 <x-coredata:///User/tC48E8991-B8A6-4E68-9112-93F9F21DB5382> ; data: <fault>)
Run Code Online (Sandbox Code Playgroud)
我的理解是,当我尝试访问此对象的某个属性时,Core Data框架将触发错误.我很困惑为什么我在这种情况下访问用户的"id"属性没有触发错误?
编辑:
这是创建和使用loggedInUser对象的方法:
//method to get bgContext
+(NSManagedObjectContext *)getContextOnBgWithParentSetToMainMOC
{
NSManagedObjectContext *tmpContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[tmpContext setParentContext:[Utils getAppDelegate].managedObjectContext];
return tmpContext;
}
//in App Delegate
NSManagedObjectContext *bgContext = [NSManagedObjectContext getContextOnBgWithParentSetToMainMOC];
self.loggedInUser = [User importFromObject:loggedInUserData inContext:bgContext completionBlock:^(NSManagedObjectContext *theContext, NSManagedObject *theManagedObjectWithValuesImported) {}];
//In User.m file
+ (User *)importFromObject:(NSDictionary *)dictionary inContext:(NSManagedObjectContext *)context completionBlock:(TemporaryContextImportReturnBlock)block {
if ( !context ){
context = [NSManagedObjectContext getContextOnBgWithParentSetToMainMOC];
}
NSManagedObjectContext *localContext = context; …Run Code Online (Sandbox Code Playgroud) 我正在为实时产品开发浏览器扩展.我有一个后台页面,在manifest.json中设置了"persistent:true"(我使用的是版本v2).我每隔一秒使用setInterval()轮询服务器以获取新数据.后台脚本还会缓存到目前为止收集的数据,并将其提供给任何新打开的选项卡.
事情很好,直到有时我注意到当我让电脑长时间睡眠时,我对服务器的调查就停止了!如果我刷新了任何现有选项卡,我确实看到了缓存数据.这意味着,后台页面未被Chrome杀死.我的问题是,为什么chrome只是停止setInterval()调用?此外,如果由于某种原因停止投票,恢复投票的正确方法是什么?
//relevant part of manifest.json
"background": {
"scripts": [
"js/background/jquery.min.js",
"js/background/bgconfig.js",
"js/background/backgroundmanager.js",
"js/background/eventsfetcher.js"
],
"persistent": true
},
Run Code Online (Sandbox Code Playgroud)
谢谢!
javascript google-chrome setinterval google-chrome-extension