chrome.runtime.reload阻止扩展

时间:2017-06-13 13:01:19

标签: javascript google-chrome-extension google-chrome-app chrome-runtime

因此,我正在开发一个webpack插件,用于热重新加载chrome扩展。 最大的问题是,如果我调用了一定次数的" chrome.runtime.reload()"这将使Chrome阻止扩展程序:

This extension reloaded itself too frequently.

old discussion他们说如果你在10秒的时间范围内重拨超过5次,你的分机将被阻止。 问题是,我已经限制了重新加载(比如每5秒最多1次调用),这仍然在发生。我在文档上搜索了很多。但是没有发现任何与此有关的事情,所以我有点在黑暗中。

所以这真的是一个阈值,或者你只能在阻止扩展之前调用运行时重新加载一定次数?

更新: 为了解决这个问题,我已经为Chromium团队Let disable the "Fast Reload" blocking for unpacked extensions申请了一项新功能。如果有人遇到同样的问题,请在此功能请求上给出一个明星:)

1 个答案:

答案 0 :(得分:3)

当达到阈值(即快速连续重载5次)时,您必须等待至少10秒才能重置计数器,并且可以安全地重新加载扩展名。

Source(修剪代码以强调相关逻辑):

  std::pair<base::TimeTicks, int>& reload_info =
      last_reload_time_[extension_id];
  base::TimeTicks now = base::TimeTicks::Now();
  if (reload_info.first.is_null() ||
      (now - reload_info.first).InMilliseconds() > kFastReloadTime) {
    reload_info.second = 0;
  } else {
    reload_info.second++;
  }

  // ....

  reload_info.first = now;
  ExtensionService* service =
      ExtensionSystem::Get(browser_context_)->extension_service();
  if (reload_info.second >= kFastReloadCount) {
    // ....
    base::ThreadTaskRunnerHandle::Get()->PostTask(
        FROM_HERE, base::BindOnce(&ExtensionService::TerminateExtension,
                                  service->AsWeakPtr(), extension_id));
    extensions::WarningSet warnings;
    warnings.insert(
        extensions::Warning::CreateReloadTooFrequentWarning(
            extension_id));

kFastReloadTimekFastReloadCount定义here

// If an extension reloads itself within this many miliseconds of reloading
// itself, the reload is considered suspiciously fast.
const int kFastReloadTime = 10000;
// After this many suspiciously fast consecutive reloads, an extension will get
// disabled.
const int kFastReloadCount = 5;