我需要在Javascript(而不是当前网址)中找到请求的网址,以确定加载了两个显示网站中的哪一个。
场景:我目前正在为Icinga Web 2构建一个模块,它可以选择显示两个框架(两个单独的.phtml文件)并排。当其中两个框架打开时,浏览器中显示的URL如下所示:
http://host/icingaweb/mymodule/siteA#!/icingaweb/mymodule/siteB
您可以单击其上的按钮单独重新加载单个帧。在浏览器日志(和apache日志)中,您可以看到,对于每个加载,只需要特定页面:
// reloading siteA
GET http://host/icingaweb/mymodule/siteA
// reloading siteB
GET http://host/icingaweb/mymodule/siteB
我在Javascript中至少需要这个单一的请求(至少是请求的网站)。
不幸的是,以下功能不起作用:
var pathname = window.location.pathname;
// returns (no matter which site is reloaded): "/icingaweb/mymodule/siteA"
var url = window.location.href;
// returns (no matter which site is reloaded): "http://host/icingaweb/mymodule/siteA#!/icingaweb/mymodule/siteB"
Icinga Web 2将所有javascript内容解析为单个文件,该文件随后可全局访问(icinga.min.js)。自定义javascript必须放在module.js。
中module.js
(function(Icinga) {
var mymodule = function(module) {
/**
* The Icinga.Module instance (public/js/Icinga/module.js)
*/
this.module = module;
this.initialize();
this.module.icinga.logger.info('mymodule module loaded');
};
mymodule.prototype = {
initialize: function()
{
/**
* Tell Icinga about our event handlers, these are then
* automatically detached once Icinga is unloading
*/
this.module.on('rendered', this.showURLs);
},
showURLs: function(event)
{
var pathname = window.location.pathname;
// returns (no matter which site is reloaded): "/icingaweb/module/siteA"
var url = window.location.href;
// returns (no matter which site is reloaded): "http://host/icingaweb/module/siteA#!/icingaweb/module/siteB"
}
};
/**
* Register this module so that Icinga knows about it
*
* It's important that the identifier used is the same
* as the name of the module itself (case sensitive)
*/
Icinga.availableModules.mymodule = mymodule;
}(Icinga));
答案 0 :(得分:0)
对于那些对解决方案感兴趣的人,JoNe和Icinga Web 2开发人员在monitoring-portal.org回答了我的问题
您可以使用以下内容获取当前加载的框架/页面的URL:
$(event.target).closest('.container').data('icingaUrl')
非常感谢JoNe。