-
-
Save anaisbetts/2d2de55d137a1cf9d1ac to your computer and use it in GitHub Desktop.
| // Pretend that cookies work | |
| (function (document) { | |
| var cookies = {}; | |
| document.__defineGetter__('cookie', function () { | |
| var output = []; | |
| for (var cookieName in cookies) { | |
| output.push(cookieName + "=" + cookies[cookieName]); | |
| } | |
| return output.join(";"); | |
| }); | |
| document.__defineSetter__('cookie', function (s) { | |
| var indexOfSeparator = s.indexOf("="); | |
| var key = s.substr(0, indexOfSeparator); | |
| var value = s.substring(indexOfSeparator + 1); | |
| cookies[key] = value; | |
| return key + "=" + value; | |
| }); | |
| document.clearCookies = function () { | |
| cookies = {}; | |
| }; | |
| // Pretend that we're hosted on an Internet Website | |
| document.__defineGetter__('location', function() { | |
| return { | |
| href: 'http://atom-shell.local/', | |
| protocol: 'http:', | |
| host: 'atom-shell.local', | |
| port: '', | |
| pathname: '/', | |
| search: '', | |
| hash: '', | |
| username: '', | |
| password: '', | |
| origin: 'http://atom-shell.local' | |
| }; | |
| }); | |
| // Nobody sets location | |
| document.__defineSetter__('location', function() {}) | |
| })(document); | |
| (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | |
| (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | |
| m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | |
| })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | |
| ga('create', '****** YOUR TOKEN HERE*****', 'auto'); | |
| ga('send', 'pageview'); |
The cookie approach is formalized as a module here: https://github.com/hstove/electron-cookies
So far I haven't been able to get cookies working in electron, I was wondering if you did.
See Also
- electron/electron#1852 - cookie headers are blocked
There's a different approach to this that might work slightly better for you
// the window.isRunningAsElectron is something you have to configure
if (window.isRunningAsElectron) {
// grab a uuid to identify the session
var uuid = window.erequire('node-uuid');
// set the uuid to local storage
if (!localStorage["gaClientId"])
localStorage.setItem("gaClientId",uuid.v4())
// set the cookie storage for google analytics to none, and provide your own client id
var clientId = localStorage["gaClientId"];
ga('create', "<ga-id>",{
'storage': 'none',
'clientId': clientId
});
// finally, disable the protocol check to allow file://
ga('set', 'checkProtocolTask', function(){}); // Disable file protocol checking.
} else {
ga('create', "<ga-id>", 'auto');
}
ga('send', 'pageview');Does this solution work with Electron 0.30.4? Because I'm still getting the actual location (file://...) even after define getter.
I'm also getting file:// in the location object, any ideas? :)
I created a library for this purpose nwjs-analytics, if you would like to contribute
I’m using this together with couchdb. When I do a call to _session and login I get a session cookie back. This seems to be saved since all recurring request with 'withCredentials' : true headers have the cookie. However, why/how can I access the cookie directly in the debugger? document.cookie returns an empty string: ""…
Interesting solution. Thanks for posting this. Is the cookie replacement required? Also, the hostname property is missing. I recommend adding a wrapper for location.reload() too or livereload won't work among other things.