我有一个html代码,我无法更改,但可以将.js文件加载到其中。
我可以添加一些java脚本代码来阻止window.location.replace
工作吗?
答案 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
})();