browserify + chrome 扩展的 getBackgroundPage()

browserify + chrome extension's getBackgroundPage()

我正在使用 browserify 来管理一个 Chrome 扩展,虽然总的来说它看起来运行良好,但是 browserify 将库代码嵌入到一些包装器中时会出现问题。特别是,当从 Chrome 扩展插件访问 chrome.extensions.getBackgroundPage() 时,如 here,并非所有(none?)后台页面的局部变量都可以访问。任何人都可以通过将 background.js 包装在

中来复制它
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
//[...]
},{}]},{},[1]);

就像 browserify 一样。

我不确定 chrome.extension.getBackgroundPage() 背后有什么样的魔法(如果有的话),但也许其他人有想法。

当您对模块进行浏览器化时(例如,background.js),它会被包裹在一个函数中。因此,此处声明的所有变量都采用

的样式
var iii = 123;

无法从外部访问,尤其是无法导出到 chrome.extensions.getBackgroundPage()。您想要在别处使用的所有变量, 必须 声明为 global,例如,

global.iii = 123;

补充一下 Nico 的回答,chrome.extensions.getBackgroundPage() 总是有点粗糙。

更好的方法是分离弹出窗口和后台代码,而是使用 Messaging and share data in chrome.storage.

传递命令

那么就没有出现这个问题