javascript - Angular 在 ng-src 中对 url 进行编码,并将 '/' 替换为 %2F,将 '?' 替换为 %3F

标签 javascript angularjs encoding kibana urlencode

我有一个带有 URL 的 Kibana 仪表板:

/logquery/app/kibana#/dashboard/Some-Dashboard?someParameters

我有一个 Web 应用程序,我试图将上面的仪表板嵌入到 <iframe> 中. web应用中的url如下

/dashboards/logquery/app/kibana#/dashboard/Some-Dashboard?someParameters

在 AngularJs 中,我正在做:

ctrl.dashboardUrl = $location.url().replace('/dashboards', '');

在我看来:

<div ng-controller="DashboardCtrl as ctrl">
    <div class="iframe-container">
        <iframe ng-src="{{ctrl.dashboardUrl | trustAsUrl}}"
                height="100%"
                width="100%"
                ng-cloak
                frameborder="0"
                marginheight="0"
                marginwidth="0"></iframe>
    </div>
</div>

trustAsUrl过滤器如下:

filtersGroup.filter('trustAsUrl', [
    '$sce',
    function ($sce) {
        return function (val) {
            return $sce.trustAsResourceUrl(val);
        };
    }]);

我有:

$locationProvider.html5Mode({
                enabled: true,
                requireBase: false,
                rewriteLinks: false
            });

这会导致 / /kibana# 之后的字符替换为 %2F?%3F这导致 Kibana 无法找到请求的仪表板。

我该如何克服这个问题?谢谢!

最佳答案

问题似乎出在 vsprintf 方法上,您在问题陈述中遗漏了该方法,但出现在 fiddle 中代码。我修改了 fiddle 并使用 javascript 字符串插值代替 PHP vsprintf 方法,它返回正确的 URL。

修复:

之前

vsprintf("%s://%s/%s", [$location.protocol(), $location.host(), $location.url().replace('/dashboards', '')]);

之后

ctrl.dashboardUri = `${$location.protocol()}://${$location.host()}/${$location.url().replace('/dashboards', '')}`

关于javascript - Angular 在 ng-src 中对 url 进行编码,并将 '/' 替换为 %2F,将 '?' 替换为 %3F,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928626/

相关文章:

c++ - 如何使用 Visual C++ 将 UTF-8 编码数据存储到 sqlite3

java - 如何将jsp页面中的javascript变量传递到另一个java文件?

javascript - Angular JS : bind class to two different expressions?

objective-c - 尝试编码 UIImage 并存储到 NSUserdefault 时,应用程序变慢

javascript - 在 Rails 应用程序的移动尺寸屏幕中将图像导航元素对齐为 2 行

javascript - AngularJs:列表未显示在 ng-Bind 或 ng-model 中

xml - Coldfusion XMLFormat() 不转换所有字符

javascript - 使用 jquery 检查元素是否聚焦(周围有轮廓)

javascript - 在新菜单打开之前关闭页面上的其他菜单

javascript - React-router-dom 页面不会切换?