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
.
传递命令
那么就没有出现这个问题
我正在使用 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
.
那么就没有出现这个问题