【问题标题】:Function doesn't work in IE but works well in FF and chrome. What is my mistake?函数在 IE 中不起作用,但在 FF 和 chrome 中运行良好。我的错误是什么?
【发布时间】:2014-07-04 22:24:44
【问题描述】:

这里的代码在 Firefox 和 Chrome 中完美运行,即使是过时的版本。 但在 Internet Explorer 中,它不适用于 IE 7 或 8。 未经 IE 6 测试但不应该工作(这不是问题) 未使用 IE 9 测试(没有)。

我得到的错误是:“有一个错误,因为 local_load 为空或未定义。”

我的 php 页面中有这个调用:

    <html>
    <head>...</head>
    <body>
    [... some html...]
    <?php
    include 'footer.php';
    ?>
    <script>
        $(document).ready(function() {
            local_load();
            initialize();
            return true;
        });
   </script>
   </body>
   </html>

local_load() 位于通过 footer.php 加载的外部 js 文件中。 Local_load() 的内容是这样的:

function local_load() {
    if ($.jStorage.storageAvailable() == true) {
        // we need to execute regulary this function.
        // It will stop automatically once the whole job is done.
        interval = setInterval(function() {
            display_something(true)
         }, 700, true);
    }
    else {
        Nostorage();
    }
    return true;
}

================= 回答你的问题:

从浏览器的来源复制:

functions-map.js 内容:

function local_load() {

if ($.jStorage.storageAvailable() == true) {
    poi_recept = $.jStorage.get("poi_ids");
    if (poi_recept.length > 0) {
        poi_recept_compte = -1;
        poi_recept_interval = setInterval(function() {
            display_autourde(true)
        }, 700, true);
    }
}
else {
    Nostorage();
}
return true;
}

【问题讨论】:

  • 可能在加载footer.php 时遇到语法错误,导致无法定义函数。
  • 有一个错误,因为听起来不像是来自 IE 的真正错误消息。确切的错误信息是什么?
  • 您需要展示更多关于local_load() 的实际加载方式。如果它在动态加载的脚本文件中,那么您将有一个计时漏洞,该漏洞会因缓存/浏览器/网络情况而异。
  • 真正的错误信息是:SCRIPT5007: La valeur de la propriété "local_load" est null ou non définie, pas un objet function
  • 也许您只能向我们展示服务器生成的干净 HTML。您在问题中包含的语言越多,您等待答案的时间就越长。

标签: javascript function internet-explorer


【解决方案1】:

从您的 cmets 看来,local_load() 是在 fonctions-map.jsdocument.ready() 回调中定义的。如果是这种情况,那么它就不能从其他地方调用,因为它是一个本地函数,只能从它定义的范围内调用。

所以,如果fonctions-map.js 是这样的:

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

然后,您不能从其他地方调用local_load(),因为它不是公共函数。您可以通过将其定义移至任何其他函数之外的顶层来使其成为公共函数。

// define local_load() to be available to external callers
function local_load() {
    ...
}

$(document).ready(function() {
    // only put code here that actually 
    // needs to wait until the document is ready to run
});

【讨论】:

  • $(document).ready(function() {} 在我的 html 页面中。函数 local_load() 在 fonction-map.js 中。$(document).ready(function( ) {} 没有定义 local_load()。它只包含对 local_load() 的调用。
【解决方案2】:

您的 html 中似乎没有包含包含 local_load() 的文件 声明间隔时也应该有 var 其他浏览器足够聪明,可以解决这个问题,但 IE 没有那么聪明。

例如

var interval = setInterval( ....

【讨论】:

  • 问题说文件正在 HTML 中加载。 IE 很乐意为全局变量赋值。
  • 它说 local_load 在外部 js 文件中。所以我猜这个文件没有加载。
  • @Mariatta 文件已加载(我在上面添加了浏览器的源代码)。此外,poi_recept_interval 变量在 js 文件的顶部用“var”声明,以使其公开,因为我几乎需要在任何地方引用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多