【问题标题】:JavaScript: calling a function by name on hashchangeJavaScript:在 hashchange 上按名称调用函数
【发布时间】:2012-12-20 19:02:01
【问题描述】:

我正在尝试调用给定哈希字符串中的函数名称的函数。我有以下代码:

$(window).on('hashchange', function() {
  //alert(location.hash.substring(1, location.hash.length));
  window[location.hash.substring(1, location.hash.length)];
});

function test() {
  alert('123!');
}

有趣的是,当我取消注释 alert 调用时,一切正常。但是,当 alert 被评论时,它不起作用。

有什么想法吗?

【问题讨论】:

  • 你在哪里调用函数?
  • 听起来你正在尝试做的事情会打开一个major XSS hole
  • @Bergi:我仅将其用于移动 Web 应用程序中的页面导航。被调用的函数用于通过 API 调用呈现页面,这需要身份验证,所以我不认为它真的会带来安全风险(但如果我错了,请纠正我)。谢谢!
  • 这些 API 调用是否改变了某些东西,或者它们只是 GET 请求?身份验证可能以前发生过,因此用户不会注意到发生了什么。此外,此代码允许执行任意(并且可能不需要)功能,请尝试打开 www.yourpage.com/#alert。所以把这些函数放在它们自己的对象上,而不是全局窗口对象上,你可以控制它有哪些(可调用的)属性。

标签: javascript jquery hashchange


【解决方案1】:
window[location.hash.substring(1, location.hash.length)];

不调用函数。

如果你想调用名为location.hash.substring(1, location.hash.length)的函数,你可以这样做

window[location.hash.substring(1, location.hash.length)]();

旁注:

location.hash.substring(1, location.hash.length)

可以缩短

location.hash.slice(1)

【讨论】:

  • 是的,忘记括号了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多