【问题标题】:How is it done?它是如何完成的?
【发布时间】:2015-08-29 23:12:37
【问题描述】:

stackoverflow 如何知道 javascript 何时无法运行,并能够在页面顶部通知用户?

是否可以判断脚本是否没有加载或产生错误,然后仍然能够使用 javascript 生成错误消息?

【问题讨论】:

    标签: javascript error-handling


    【解决方案1】:
    <noscript>
        <div id="noscript-warning">Stack Overflow works best with JavaScript enabled<img src="http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno"></div>
    </noscript>
    

    JS 加载问题只有在您可以加载 JS 时才会发生,这意味着 JS 已启用。确定 JS 是否已加载的最简单方法是挂钩加载成功/失败事件,或者查询您知道在加载的 JS 中实现的内容(加载过程完成后)。

    【讨论】:

    • 这涵盖了 JavaScript-disabled 位,但是 JavaScript-failed-to-load 呢?
    【解决方案2】:

    &lt;noscript&gt;

    使用&lt;noscript&gt; 标签:

    <noscript>
        <div>JavaScript isn't available.<div>
        <div>Please Enable it to continue.<div>
    </noscript>
    

    堆栈溢出

    堆栈溢出使用此代码:

    <noscript>
        <div id="noscript-warning">Stack Overflow works best with JavaScript enabled<img src="http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno"></div>
    </noscript>
    

    JavaScript try..catch

    要处理错误,您可以将所有 JS 包装在一个函数中:

    try {
        runAllJavaScript();
    } catch (e) {
        alert("There was a fatal error :(");
    }
    

    另一个例子

    eval可以使用:

    var code = new XMLHttpRequest();
    code.onload = function () {
        try { eval(code.responseText); }
        catch (e) {
            alert("The JavaScript had an error");
        }
    };
    code.onerror = function () {
        alert("Script didn't load!");
    };
    code.open("GET", "path/to/script.js");
    code.send();
    

    大多数人会喜欢这个解决方案,因为它可能被认为是“hacky”

    【讨论】:

    • 不太清楚如果 JS 被禁用,我是否理解 JS 解决方案的工作原理。
    • @DaveNewton 不应该是JS加载失败,应该是处理错误
    • 您涵盖了 OP 询问的大部分内容。但问题还说“是否可以判断脚本是否未加载?”
    • @nnnnnn 很简单。使用onerror,我已经添加了
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多