【问题标题】:JSON callback doesn't trigger if function called from within own file如果从自己的文件中调用函数,则不会触发 JSON 回调
【发布时间】:2012-06-28 12:02:14
【问题描述】:

标题是我总结的最好方式。如何解释这个有点模糊。 基本上,如果我在 html 文件中包含保存 JSON 函数的 javascript 文件,则触发 JSON 函数 - 回调有效。但是,如果我只是从它自己的文件中调用 JSON 函数 - 回调永远不会触发。不确定这是否是某种 javascript 或网络浏览器安全功能。非常感谢您的解释。

这里有一些例子。

工作版本:

json.html:(修剪)

<html>
<head><script type="text/javascript" src="json.js"></script></head>
<script>
    JSON_Object(json_url, function(json_obj) {
        alert(json_obj); // this version works!
    });
</script>
<html>

json.js:

function JSON_Object(json_url, callback) {
    // This function will return an object to the JSON data.
    json_url = json_url + "&callback=jsonCallback";

    var json_script = document.createElement("script");
    json_script.setAttribute("src", json_url);
    json_script.setAttribute("type", "text/javascript");

    window.jsonCallback = function(jsonObjReturn) {
        // cleanup
        document.body.removeChild(json_script);
        delete window[callback];

        callback(jsonObjReturn); // use our callback function to return the data.
    }

    document.body.appendChild(json_script);
}

非工作版本 - json.js 中的另一个函数:

    JSON_Object(content_page, function(json_obj) {
        alert(json_obj); // This version doesn't work. Never called.
    });

【问题讨论】:

  • 有什么错误吗?这一行:delete window[callback];。你可能想要delete window.jsonCallback;。不过应该没关系。
  • 实际上,现在我检查了。我确实在 json_url.php 上遇到错误。错误:“未捕获的 ReferenceError:未定义 jsonCallback”我正在使用 Chrome 并在元素视图中看到了这一点。应该注意的是,在它不起作用的情况下,该脚本是由 Chrome 扩展加载的 UserScript。我假设这与它有关。可能是某种范围的界定。
  • 给我们更多信息。脚本究竟是如何加载的,扩展的作用是什么?通常扩展和背景页面是分开的。因此,window 变量在后台是其他东西,在扩展中是其他东西。
  • 当然,没问题。我只是不知道这很重要。好的,让我们试着解释一下。正如我之前的评论所说,这是一个 javascript 文件,它是在开发模式下加载到 Chrome 中的用户脚本。该文件旨在影响网页,但实际上并未托管在服务器上。 IE:像任何其他扩展/用户脚本一样修改网页的外观。作用是使用 JSON 从另一台服务器(我的服务器)检索数据。 window 变量的作用域是有意义的。我假设 window.jsonCallback 函数在作为 UserScript 加载时对文件不可用。

标签: javascript json callback jsonp undefined


【解决方案1】:

经过一番研究,我发现我是对的。它是用于扩展的 Web 浏览器安全功能。 从以下链接: http://code.google.com/chrome/extensions/content_scripts.html

从页面引用

但是,内容脚本有一些限制。他们不能:

  • 使用由其扩展页面定义的变量或函数
  • 使用网页或其他内容脚本定义的变量或函数

JSON 属于上述类别,因为它使用回调函数。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 2011-11-23
    • 2015-03-29
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多