从重定向停止window.location.replace

时间:2016-02-22 16:24:14

标签: javascript

我有一个html代码,我无法更改,但可以将.js文件加载到其中。

我可以添加一些java脚本代码来阻止window.location.replace工作吗?

2 个答案:

答案 0 :(得分:3)

要执行此操作,您必须替换java.lang.IllegalStateException: No Token available. twitter4j.auth.OAuthAuthorization.ensureTokenIsAvailable(OAuthAuthorization.java:71) twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:131) twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:146) twitter4j.TwitterBaseImpl.getOAuthAccessToken(TwitterBaseImpl.java:362) com.xxx.social.controller.Twitter.doGet(Twitter.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:620) javax.servlet.http.HttpServlet.service(HttpServlet.java:727) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 上的replace功能,完全替换location或替换 location 完全(这不是保证,因为您也可以在松散模式下以全局范围的window访问它,并通过其他几个别名)。

似乎无法使用this

Benjamin提到了历史记录API,但我在历史记录API中看不到任何可以取消由Object.defineProperty发起的导航的内容。

所以我认为你不能这样做。

(CW因为这是社区的努力。)

答案 1 :(得分:1)

您无法重新定义location.replace,因为它不是可配置的属性。

但是,您可以尝试使用类似对象(例如代理)替换整个location对象,但使用自定义replace

问题是window.replace既不可配置,但您可以在内部范围内隐藏它:

(function() {
  function customReplace() { /* ... */ }
  var location = new Proxy(Object.create(window.location), {
    get: function(target, property, receiver) {
      if(property === 'replace') return customReplace;
      return window.location[property];
    },
    set: function(target, property, value, receiver) {
      return window.location[property] = value;
      return true;
    },
  });
  location.replace('http://example.com'); // Nothing happens
  location.host; // Still works
  location.host = 'example.com'; // Still works
})();