饼干模块不能在电子应用程序中工作

问题描述:

我想从浏览器标题返回cookie,但我甚至无法让模块工作。我可以运行应用程序,但我收到错误消息:Error Alert。我用Electron + Webpack + React使用Node.JS。这是我的代码:饼干模块不能在电子应用程序中工作

var app = require('app'); 
 
var BrowserWindow = require('browser-window'); 
 
var http = require('http'); 
 
var Cookies = require('./node_modules/cookies'); 
 
require('crash-reporter').start(); 
 

 
app.on('window-all-closed', function() { 
 
    if (process.platform != 'darwin') { 
 
    app.quit(); 
 
    } 
 
}); 
 

 
app.on('ready', function() { 
 
    mainWindow = new BrowserWindow({ 
 
    \t frame: true, 
 
    \t width: 1200, 
 
    \t resizable: false, 
 
    \t height: 800, 
 
    'web-preferences': {'web-security': false}}); 
 
    
 
    mainWindow.setMenu(null); 
 

 
    mainWindow.loadUrl('file://' + __dirname + '/public/index.html'); 
 

 
    mainWindow.openDevTools(); 
 

 
    mainWindow.on('closed', function() { 
 
    mainWindow = null; 
 
    }); 
 
    
 
    mainWindow.on.session.Cookies.get({}, function(error, Cookies) { 
 
    if (error) throw error; 
 
    console.log(Cookies); 
 
    }); 
 
});

的package.json:

{ 
 
    "name": "BSB-app", 
 
    "version": "0.1.0", 
 
    "description": "", 
 
    "main": "main.js", 
 
    "devDependencies": { 
 
    "babel": "^6.5.2", 
 
    "babel-cli": "^6.6.0", 
 
    "babel-core": "^6.5.2", 
 
    "babel-loader": "^6.2.3", 
 
    "babel-preset-es2015": "^6.6.0", 
 
    "babel-preset-react": "^6.5.0", 
 
    "babel-register": "^6.6.0", 
 
    "css-loader": "^0.23.1", 
 
    "electron-cookies": "^1.1.0", 
 
    "electron-packager": "^5.2.1", 
 
    "electron-rebuild": "^1.1.3", 
 
    "less": "^2.6.0", 
 
    "less-loader": "^2.2.2", 
 
    "node-libs-browser": "^1.0.0", 
 
    "style-loader": "^0.13.0", 
 
    "webpack": "^1.12.14", 
 
    "webpack-dev-server": "^1.14.1" 
 
    }, 
 
    "dependencies": { 
 
    "babel-polyfill": "^6.6.1", 
 
    "electron-prebuilt": "^0.36.8", 
 
    "exports-loader": "^0.6.3", 
 
    "imports-loader": "^0.6.5", 
 
    "react": "^0.14.7", 
 
    "react-dom": "^0.14.7", 
 
    "react-redux": "^4.4.0", 
 
    "redux": "^3.3.1", 
 
    "whatwg-fetch": "^0.11.0" 
 
    }, 
 
    "scripts": { 
 
    "start": "electron .", 
 
    "watch": "node_modules/.bin/webpack-dev-server", 
 
    "electron-rebuild": "node_modules/.bin/electron-rebuild" 
 
    } 
 
}

Webpack.config.js:

const webpack = require('webpack'); 
 

 
const production = process.env.NODE_ENV === 'production'; 
 

 
module.exports = { 
 
    entry: { \t 
 
    app: ['webpack/hot/dev-server', './javascripts/entry.js'] 
 
    }, 
 

 
    output: { 
 
    path: './public/built', 
 
    filename: 'bundle.js', 
 
    publicPath: 'http://localhost:8080/built/' 
 
    }, 
 

 
    devServer: { 
 
    contentBase: './public', 
 
    publicPath: 'http://localhost:8080/built/' 
 
    }, 
 
    resolveLoader: { 
 
     modulesDirectories: [ 
 
      'node_modules' 
 
     ] 
 
\t }, 
 
    module: { 
 
    loaders: [ 
 
     { test: /\.jsx?$/, loader: 'babel-loader', query: { presets: ['es2015', 'react'] }, exclude: /node_modules/ }, 
 
     { test: /\.css$/, loader: 'style-loader!css-loader' }, 
 
     { test: /\.less$/, loader: 'style-loader!css-loader!less-loader'}, 
 
    ] 
 
    }, 
 

 
    plugins: [ 
 
    new webpack.HotModuleReplacementPlugin(), 
 
    new webpack.DefinePlugin({ 
 
     'process.env': {NODE_ENV: JSON.stringify(process.env.NODE_ENV)}, 
 
    }), 
 
    new webpack.ProvidePlugin({ 
 
    'fetch': 'imports?this=>global!exports?global.fetch!whatwg-fetch' 
 
    }), 
 
    \t new webpack.IgnorePlugin(new RegExp("^(fs|ipc)$")) 
 
    ] 
 
}

electron-cookies包是指在渲染过程中使用,你尝试在主/浏览器过程中使用它。在渲染过程中,你应该能够做到这样的事情:

require('electron-cookies'); 

document.cookie = 'key=value; key2=value2'; 
// or to clear the cookies 
document.clearCookies(); 
+0

谢谢,这是有效的。 – benydc

+1

我可以看到fetch> post设置的cookie,但是当我执行fetch> get(凭证包含)时,不会发送cookie。 – benydc

+1

使用抓取时,我可以让Electron发送cookie的唯一方法是强制Github抓取polyfill [https://github.com/github/fetch](https://github.com/github/fetch)在顶部内置window.fetch。 由于polyfill检查是否已经存在提取函数,因此我必须将代码从node_modules中提取出来并存入我的项目中,然后删除该检查。 –