greasemonkey_api.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. // -----------------------------------------------------------------------------
  5. // NOTE: If you change this file you need to touch renderer_resources.grd to
  6. // have your change take effect.
  7. // -----------------------------------------------------------------------------
  8. // Partial implementation of the Greasemonkey API, see:
  9. // http://wiki.greasespot.net/Greasemonkey_Manual:APIs
  10. function GM_addStyle(css) {
  11. var parent = document.getElementsByTagName("head")[0];
  12. if (!parent) {
  13. parent = document.documentElement;
  14. }
  15. var style = document.createElement("style");
  16. style.type = "text/css";
  17. var textNode = document.createTextNode(css);
  18. style.appendChild(textNode);
  19. parent.appendChild(style);
  20. }
  21. function GM_xmlhttpRequest(details) {
  22. function setupEvent(xhr, url, eventName, callback) {
  23. xhr[eventName] = function () {
  24. var isComplete = xhr.readyState == 4;
  25. var responseState = {
  26. responseText: xhr.responseText,
  27. readyState: xhr.readyState,
  28. responseHeaders: isComplete ? xhr.getAllResponseHeaders() : "",
  29. status: isComplete ? xhr.status : 0,
  30. statusText: isComplete ? xhr.statusText : "",
  31. finalUrl: isComplete ? url : ""
  32. };
  33. callback(responseState);
  34. };
  35. }
  36. var xhr = new XMLHttpRequest();
  37. var eventNames = ["onload", "onerror", "onreadystatechange"];
  38. for (var i = 0; i < eventNames.length; i++ ) {
  39. var eventName = eventNames[i];
  40. if (eventName in details) {
  41. setupEvent(xhr, details.url, eventName, details[eventName]);
  42. }
  43. }
  44. xhr.open(details.method, details.url);
  45. if (details.overrideMimeType) {
  46. xhr.overrideMimeType(details.overrideMimeType);
  47. }
  48. if (details.headers) {
  49. for (var header in details.headers) {
  50. xhr.setRequestHeader(header, details.headers[header]);
  51. }
  52. }
  53. xhr.send(details.data ? details.data : null);
  54. }
  55. function GM_openInTab(url) {
  56. window.open(url, "");
  57. }
  58. function GM_log(message) {
  59. window.console.log(message);
  60. }
  61. (function() {
  62. function generateGreasemonkeyStub(name) {
  63. return function() {
  64. console.log("%s is not supported.", name);
  65. };
  66. }
  67. var apis = ["GM_getValue", "GM_setValue", "GM_registerMenuCommand"];
  68. for (var i = 0, api; api = apis[i]; i++) {
  69. window[api] = generateGreasemonkeyStub(api);
  70. }
  71. })();