javascript - 从 $(document).ready() 内部调用时 GM_xmlhttpRequest 不起作用?

标签 javascript ajax greasemonkey gm-xmlhttprequest

这是我的GM_xmlhttpRequest脚本:

// ==UserScript==
// @name        test
// @namespace   test
// @include     http://stackoverflow.com/*
// @version     1
// ==/UserScript==

GM_xmlhttpRequest({
  method: "GET",
  url: "http://example.com",
  onload: function(response) {
    alert(response.responseText);
  }
});

function begin(){
    alert("ready");
}

$(document).ready(function() {
    begin();
}); 

仅提醒 example.com 的内容,而不是“就绪”。

但是当我执行以下操作时,什么也没有发生 - 没有任何警报:

function begin(){
    GM_xmlhttpRequest({
      method: "GET",
      url: "http://example.com",
      onload: function(response) {
        alert(response.responseText);
      }
    });
    alert("ready");
}

$(document).ready(function() {
    begin();
}); 

我做错了什么?

最佳答案

我很确定第一个示例显示了 GM_xmlhttpRequest 返回的内容,但不是“ready

jQuery/$ 无法在 Greasemonkey 中直接访问。它被加载到页面内(在本例中是由 stackoverflow.com 加载)。要访问页面的功能/属性,您可以使用 unsafeWindow-object( http://wiki.greasespot.net/UnsafeWindow ):

unsafeWindow.$(document).ready(function() {
    begin();
}); 

但我建议直接调用 begin() ,这里不需要 $.ready() ,因为 GM 脚本将始终在 DOMContentLoaded-event 触发时执行,这是相等的到 $.ready()

关于javascript - 从 $(document).ready() 内部调用时 GM_xmlhttpRequest 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14120470/

相关文章:

javascript - 在 JQuery 对象上使用 .splice()

javascript - 如何在 JavaScript 中将 Ajax 转换为 Fetch API?

javascript - 如何制作类似 GreaseMonkey 的脚本以在下三分之一处显示不同的页面?

javascript - 如何使用 greasemonkey 有选择地从网站中删除内容

javascript - 忽略两个正则表达式匹配之间的字符串

javascript - 对于通过函数添加的项目,jQuery 不会使用 .on() 将点击绑定(bind)到下划线模板

javascript - 更改 javascript 显示/隐藏文本功能

javascript - 如何在类的实例中声明类的实例?

javascript - 发送 ajax 请求并使用 prototype.js 得到响应

javascript - 使用javascript循环遍历fileList