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

时间:2013-01-02 10:31:38

标签: 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();
}); 

我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

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

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

但我建议直接调用begin(),这里不需要$.ready(),因为GM-scripts总是在DOMContentLoaded事件触发时执行,等于$.ready() < / p>