function GM_openInTab(_url) {
  self.port.emit("GM_openInTab", _url);
};

function GM_setValue(_name, _value) {
  localStorage[_name] = _value;
};

function GM_getValue(_name, _default) {
  if (localStorage[_name] === null && _default === null) return undefined;
  return localStorage[_name] || _default;
};

function GM_deleteValue(_name) {
  localStorage.removeItem(_name);
};

function GM_listValues() {
  return Object.keys(localStorage);
};

function GM_setClipboard(_text) {
//   Break on Firefox mobile
//   self.port.emit("GM_setClipboard", _text);
};

//Deprecated
function GM_log(_message) {
  console.log(_message);
};

function GM_xmlhttpRequest(_details) {
  //Ugly hack? Race condition? Memory leak?
  _onload = _details.onload;
  _context = _details.context;
  self.port.emit("GM_xmlhttpRequest", _details);
};

self.port.on("callback_GM_xmlhttpRequest", function(_response) {
  _response.context = _context;
  _onload(_response);
});

function GM_addStyle(_css) {
  self.port.emit("GM_addStyle", _css);
}

var GM_info = new Object();
GM_info.version = '1.15';
GM_info.scriptWillUpdate = true;

//To do
function GM_registerMenuCommand(_caption, _commandFunc, _accessKey) {
  return null;
}

self.port.on("load-userscript", function(_script) {
  eval(_script);
});
function GM_openInTab(_url) {
  self.port.emit("GM_openInTab", _url);
  return; // Should return the Window object
};

function GM_setValue(_name, _value) {
  localStorage[_name] = _value;
  return;
};

function GM_getValue(_name, _default) {
  if (localStorage[_name] === null && _default === null) return;
  return localStorage[_name] || _default;
};

function GM_deleteValue(_name) {
  localStorage.removeItem(_name);
  return;
};

function GM_listValues() {
  return Object.keys(localStorage);
};

function GM_setClipboard(_text) {
//   Break on Firefox mobile
//   self.port.emit("GM_setClipboard", _text);
};

//Deprecated
function GM_log(_message) {
  console.log(_message);
  return;
};

function GM_xmlhttpRequest(_details) {
  //Ugly hack? Race condition? Memory leak?
  _onload = _details.onload;
  _context = _details.context;
  self.port.emit("GM_xmlhttpRequest", _details);
};

self.port.on("callback_GM_xmlhttpRequest", function(_response) {
  _response.context = _context;
  _onload(_response);
});

function GM_addStyle(_css) {
  self.port.emit("GM_addStyle", _css);
}

var GM_info = new Object();
GM_info.version = '1.15';
GM_info.scriptWillUpdate = true;

//To do
function GM_registerMenuCommand(_caption, _commandFunc, _accessKey) {
  return;
}

self.port.on("load-userscript", function(_script) {
  eval(_script);
});

Update greaseshim.js