首页 > 解决方案 > 用于 swagger 的 Js/Jquery 注入脚本未在 IE11 上运行

问题描述

我遇到此代码无法在 IE11 上运行的问题,我不知道出了什么问题。我对 java scrip 和 Jquery 都是全新的,这是我在 Net 中招摇的扩展脚本。网络 API。

基本上它的作用:它添加了 2 个带有 API 组/版本的新选择。一切都在 chrome 上运行良好。

(function (){
var DiscoveryUrlSelector = Backbone.View.extend({
    render: function ()
    {
        // Nerenderuj opakovanÄ na reloadu
        var defaultVal = this.$el.val()
        if (!this.$el.find('#input_' + this.options.name).length) {

            var container = $('<div class="input"></div>');
            var select = $('<select id="input_' + this.options.name + '" name="' + this.options.name + '"></select>');
            select
                .css('border', '1px solid gray')
                .css('padding', '3px')
                .css('width', '100px')
                .css('font-size', '0.9em');

            _.each(this.options.discoveryPaths, function (path)
            {
                var option = $('<option>' + path + '</option>');
                select.append(option);
            });

            select.val(defaultVal);

            if (this.options.name == 'Group')
                select.change(LoadVersionsForGroup);

            select.change(SetVersionedGroup);
            container.append(select);
            $("#api_selector > div:nth-child(2)").after(container);
        }    
        return this;
    }
});

new DiscoveryUrlSelector(
    {
        el: $('#api_selector'),
        name: 'Version',
        rootUrl: swashbuckleConfig.rootUrl,
        discoveryPaths: Array.from(new Set(swashbuckleConfig.discoveryPaths.map(x => x.substring(x.lastIndexOf("v"), x.length))))
    }).render();

new DiscoveryUrlSelector(
    {
        el: $('#api_selector'),
        name: 'Group',
        rootUrl: swashbuckleConfig.rootUrl,
        discoveryPaths: Array.from(new Set(swashbuckleConfig.discoveryPaths.map(x => x.substring(13, x.lastIndexOf("v")))))
    }).render();

function LoadVersionsForGroup()
{
    $('#input_Version option').each(function () {$(this).remove();});

    var versions = unique(swashbuckleConfig.discoveryPaths.filter(x => (x) => { return $("#input_Group").val() === x.substring(13, x.lastIndexOf("v")) }).map(x => x.substring(x.lastIndexOf("v"), x.length)))

    _.each(versions, function (path)
    {
        var option = $('<option>' + path + '</option>');
        $('#input_Version').append(option);
    });
}

function SetVersionedGroup(){
    $("#input_baseUrl").val(swashbuckleConfig.rootUrl + "/swagger/docs/" + $("#input_Group").val() + $("#input_Version").val())
}

function unique(list) {
    var result = [];
    $.each(list, function (i, e) {
        if ($.inArray(e, result) == -1) result.push(e);
    });
    return result;
}})();

编辑:开发工具中也没有错误,元素只是不渲染。我还有另一个 Jquery 脚本,它确实添加了基本身份验证控件,它工作得很好。屏幕:

在此处输入图像描述

标签: javascriptjquery

解决方案


一般来说,您将学习 JS 和 Web 开发的最重要的事情之一是,并非所有浏览器都是最新的。IE因此而臭名昭著。您可以通过使用不同的方法或更常见地使用pollyfill来否定这一点。每当您发现在 chrome 中工作但在 firefox 中没有的问题时,请查看您正在使用的方法并检查它们的支持。

有几个很好的资源可用于检查浏览器兼容性。caniuse.com 或 developer.mozilla.org(我强烈推荐使用 MDN,它是学习 JS 和 Web 开发的绝佳资源)

您还可以在兼容模式下运行 chrome 进行测试(请参阅此处的方法

说了这么多——你的 jquery 对我没有任何影响,但看起来 Swashbuckle 库中的兼容性可能存在问题。快速的谷歌搜索也显示了 IE11 中 swagger 的很多问题。查看此线程以查看它是否与您所经历的相关。这是关闭的,所以它可能不太正确,但这是我最初的怀疑。

希望这可以帮助!


推荐阅读