Chrome扩展程序在Chrome 73之后无法正常运行,只有在从商店加载后才能运行

时间:2019-03-14 22:20:50

标签: google-chrome-extension

我有一个Chrome扩展程序(https://chrome.google.com/webstore/detail/apsic-xbench-extension-fo/nhadbgflnognogbicnbeepnbpehlocgc),在Chrome 73更新后突然停止工作。

症状是,如果我转到扩展程序设计为可以使用的页面(https://translate.google.com/toolkit),然后单击扩展程序图标,而不是运行背景页面代码,则弹出菜单扩展名出现(就像我右键单击图标一样)。

但是,如果我在本地(而不是从商店)加载完全相同的代码,则Chrome扩展程序可以正常运行。

从商店中加载的扩展程序的后台页面控制台似乎没有发出任何错误。如果我在onClicked侦听器的第一行中为页面操作放置了一个断点,则它不会在Chrome Store扩展程序中停在那里(该断点对于本地加载的扩展程序来说效果很好)。

如果我从Chrome商店加载扩展程序或在本地加载扩展程序,为什么会有不同的行为?

在Chrome 72中,该扩展程序工作正常。

2 个答案:

答案 0 :(得分:0)

回答自己的问题:我找到了问题所在。事实证明,如果使用Chrome 72从Chrome商店中安装了Chrome扩展程序,则在更新为Chrome 73之后就无法正常工作。

但是,如果在更新Chrome 73之后,您删除了扩展程序,然后从Chrome商店中再次添加了扩展程序,则Chrome扩展程序可以再次使用。奇怪但真实。

答案 1 :(得分:0)

Chrome 73注入了一些新的安全性。只需尝试使用chrome.runtime.sendMessage将xHTTP请求移至后台脚本并通过SendResponse回调获得响应。

在内容或弹出脚本中,将ajax替换为:

chrome.runtime.sendMessage(
  { action: "check", data: {/* params for url */}}, 
  // callback with url response
  function(response) {
    if( response.success ) {
      var myDataFromUrl = response.data;
      ...
    } else {
      console.log('Error with `check`,', response.data);
    }
  }
);

来自后台脚本:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    var url = 'https://mysyte.com/';
    if(request.action === 'check' ) {
      url = url + 'check'
      ajax( url, request.data, 
        success: function( d ) {
          sendResponse({success: true, data: d});
        },
        error : function( d ) {
          sendResponse({success: false, data: d});
        }
      );
    }
});

function ajax( url, params, cbSuccess, cbError ) { ... }