小编Tru*_*nse的帖子

在Google Chrome中显示表情符号

我有一个支持聊天的Google Chrome扩展程序.Chrome扩展程序显示桌面通知中发送给您的邮件.我注意到每当我从iPhone发送表情符号时,它都会在桌面通知中正确显示.但是当我尝试在实际应用程序中显示相同的表情符号时(它是一个注入页面的iframe),它显示为正方形.

好像https://code.google.com/p/chromium/issues/detail?id=62435上有一个漏洞.我想知道为什么它在桌面通知中正常工作而不是其他?还有,我能做些什么来解决它吗?

google-chrome google-chrome-extension emoji

13
推荐指数
1
解决办法
3万
查看次数

更新后重新注入内容脚本

我有一个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扩展更新后删除旧内容脚本和注入新内容脚本的正确方法是什么?

google-chrome-extension

6
推荐指数
1
解决办法
2952
查看次数

Core Data未将NSManagedObject实例的错误作为app delegate上的属性触发

我将登录用户的数据从服务器导入名为"用户"的核心数据实体.我还将这个特定用户对象的引用保存到我的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)

core-data objective-c ios

5
推荐指数
1
解决办法
1999
查看次数

后台脚本中的setInteval

我正在为实时产品开发浏览器扩展.我有一个后台页面,在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

1
推荐指数
1
解决办法
2455
查看次数