我正在使用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()
背后是什么样的魔法(如果有的话),但也许其他人有想法。
答案 0 :(得分:1)
当您浏览模块(例如background.js
)时,它会被包含在一个函数中。因此,所有变量都以
var iii = 123;
无法从外部访问,特别是不会导出到chrome.extensions.getBackgroundPage()
。您希望在其他地方使用的所有变量必须声明为global
,例如,
global.iii = 123;