chrome.pageaction.show仅与超时合作



我正在编写一个镀铬扩展名,每当PDF加载时,该扩展应该显示页面动作图标。为此,我正在检查内容类型,如果等于 application/pdf,i chrome.pageAction.show(tabId)。令我惊讶的是,这个

chrome.webRequest.onHeadersReceived.addListener(
  function(details) { 
    if (details.tabId >= 0) { 
      var header = getContentTypeFromHeaders(
        details.responseHeaders,
        'content-type'
      );
      global.tabToMimeType[details.tabId] = 
        header && header.value.split(';', 1)[0];
      if (global.tabToMimeType[details.tabId] === 'application/pdf') { 
        chrome.pageAction.show(details.tabId);
      }
    }
  },
  { 
    urls: ['*://*/*.pdf'],
    types: ['main_frame']
  },
  ['responseHeaders']
);

不起作用。我可以看到图标有时会闪烁,但它永远不会持续。相反,我替换

chrome.pageAction.show(details.tabId);

setTimeout(function() {
    chrome.pageAction.show(details.tabId);
}, 100);

一切都很好。这有什么解释?有什么比等待100毫秒的系统方法了?

我相信问题是您在通过选项卡处理导航之前尝试过早显示。

因此,您的图标出现,然后页面过渡并擦拭图标。

尝试将逻辑移至onResponseStarted甚至onCompleted

由于这还不够,因此很难将webRequest事件与tabs/webNavigation事件联系起来,因此您可以继续进行方法或尝试找到另一种使用tabs/webNavigation API的PDF的方法。bk_hr>

webNavigation文档的这句话显示了我的意思:

通常,webNavigation事件与UI中显示的导航状态密切相关,而webRequest事件对应于网络堆栈的状态,该状态通常不透明用户。

因此,webRequest事件与Tab Truntition没有绑定,不能可靠地用于显示页面操作。

相关内容

  • 没有找到相关文章

最新更新