browserify + chrome extension的getBackgroundPage()

时间:2015-04-29 19:44:37

标签: javascript google-chrome google-chrome-extension browserify

我正在使用browserify管理Chrome扩展程序,虽然一般情况下看起来效果很好,但浏览器将库代码嵌入到某些包装器中会出现问题。特别是,当如所述的Chrome扩展插件(例如here)访问chrome.extensions.getBackgroundPage()时,不能访问所有(无?)背景页面的本地变量。任何人都可以通过将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()背后是什么样的魔法(如果有的话),但也许其他人有想法。

1 个答案:

答案 0 :(得分:1)

当您浏览模块(例如background.js)时,它会被包含在一个函数中。因此,所有变量都以

的方式声明
var iii = 123;

无法从外部访问,特别是不会导出到chrome.extensions.getBackgroundPage()。您希望在其他地方使用的所有变量必须声明为global,例如,

global.iii = 123;