简体   繁体   English

设置window.location.href不能按预期工作

[英]setting window.location.href not working as expected

If the user is at url foo.com/#/veryLongToken and the response.redirectUrl is foo.com/#/veryLongToken/resultToken , in the first example, when the page is reloaded we end up at foo.com/#/veryLongToken . 如果用户位于url foo.com/#/veryLongToken上 ,并且response.redirectUrlfoo.com/#/veryLongToken/resultToken ,则在第一个示例中,当页面重新加载时,我们最终会在foo.com/#/veryLongToken In the second example, we end up at foo.com/#/veryLongToken/resultToken which is what we expect. 在第二个示例中,我们最终到达了foo.com/#/veryLongToken/resultToken

More info; 更多信息;

  • The URL is very long 网址很长
  • AngularJS window-wrapper $window is used 使用AngularJS window-wrapper $ window
  • Tested in Chrome and Safari, both displaying same behaviour 经过Chrome和Safari的测试,均显示相同的行为

Doesn't work: 不起作用:

function successHandler(response) {
   $window.location.href = response.redirectUrl;
   /* redirectUrl might contain only changes to the hash-fragment
      which is why we force a reload here */
   $window.location.reload();
}

Works; 作品;

function successHandler(response) {
   $window.location.hash = response.redirectUrl.substr(response.redirectUrl.indexOf('#'));
   $window.location.reload();
}

I'd really like to know why the first example doesn't work. 我真的很想知道为什么第一个示例不起作用。 Any ideas? 有任何想法吗?

UPDATE: $window.location.href is https://foo.fo.se/#/payment/Ak1ZWDg1MDhJAwJWVElOUE5WVEZQSQMCAwIDAgMCAwIDAgMCTVlYODUwOEkDAgMCAwIDHQDSqdsSYXcT5rdNEkrClAYdawRZXF3vwZUSSb9_XHeQTFJcyJxnQXnz1V4gQCTgm7q9OYmLKMFVEaCaZM8RX6iIExvQZT7uPjtfYowjvvU-JpO8yMhTquehcBOo_JEXqCskKVStCp25qWq4GdPXgP3f1KthAO17OOAdLHKMNm8bmNW8Nj-P_xltDTV22ZHABQS_4d0DcWSDj7ZfUK3q28zZ9pLdedu3sjblzmXqDiSBNEuDQfQOjMt_s0xlayYX0qUwJwwviaZ8aB-qLRnV7KD_LvaESGrtwq7_iiNIoB1jeFAp0dSG_N1c-5V-VZ3100DbJBoecTIF4NaCS62IxfM UPDATE: $window.location.hrefhttps://foo.fo.se/#/payment/Ak1ZWDg1MDhJAwJWVElOUE5WVEZQSQMCAwIDAgMCAwIDAgMCTVlYODUwOEkDAgMCAwIDHQDSqdsSYXcT5rdNEkrClAYdawRZXF3vwZUSSb9_XHeQTFJcyJxnQXnz1V4gQCTgm7q9OYmLKMFVEaCaZM8RX6iIExvQZT7uPjtfYowjvvU-JpO8yMhTquehcBOo_JEXqCskKVStCp25qWq4GdPXgP3f1KthAO17OOAdLHKMNm8bmNW8Nj-P_xltDTV22ZHABQS_4d0DcWSDj7ZfUK3q28zZ9pLdedu3sjblzmXqDiSBNEuDQfQOjMt_s0xlayYX0qUwJwwviaZ8aB-qLRnV7KD_LvaESGrtwq7_iiNIoB1jeFAp0dSG_N1c-5V-VZ3100DbJBoecTIF4NaCS62IxfM

response.redirectUrl is response.redirectUrl

https://foo.fo.se/#/payment/AkpITDg0ODFIAwIwTDNWVkwzMzcwSgMCAwIDAgMCAwIDAgMCSkhMODQ4MUgDAgMCAwIDHTQ1Z7gveX-CH7OzdVcAtOtar9mOZQF8f4t7MFIM5b1_WU7BAEtYPfSD77sFsGmHnm4GoFMmsIHUCzscUiaP2iofV7rflegQADTieSpwbausFLn6FNmaVeZdlFEtoWr6cU1VlN09zqk4T-1cqheoDsb_jMWr3kTdZGkJh_168P99zjV324jpDIkKAZ12WFXuaphnGdNoJgP9Ka9S2aIi8LniCiJNtOq-iXL4w8JNYVyLrbOqB2QNpc__RtT5kcW9NEaPWehQx2S5CIB157RcI_WkeGJRb1DKSSuy8CFIYJVrEOlCb-GtZ9gmPhrLh6qPiumokJWSI2cUuFBDpaGAeiA/AkpITDg0ODFIAwJJTlRFUk5BTF9FUlJPUgMCAwIDAgJJTlRFUk5BTF9QUk9DRVNTX0RFQklUX05PTl9SRUNPVkVSQUJMRQMD https://foo.fo.se/#/payment/AkpITDg0ODFIAwIwTDNWVkwzMzcwSgMCAwIDAgMCAwIDAgMCSkhMODQ4MUgDAgMCAwIDHTQ1Z7gveX-CH7OzdVcAtOtar9mOZQF8f4t7MFIM5b1_WU7BAEtYPfSD77sFsGmHnm4GoFMmsIHUCzscUiaP2iofV7rflegQADTieSpwbausFLn6FNmaVeZdlFEtoWr6cU1VlN09zqk4T-1cqheoDsb_jMWr3kTdZGkJh_168P99zjV324jpDIkKAZ12WFXuaphnGdNoJgP9Ka9S2aIi8LniCiJNtOq-iXL4w8JNYVyLrbOqB2QNpc__RtT5kcW9NEaPWehQx2S5CIB157RcI_WkeGJRb1DKSSuy8CFIYJVrEOlCb-GtZ9gmPhrLh6qPiumokJWSI2cUuFBDpaGAeiA/AkpITDg0ODFIAwJJTlRFUk5BTF9FUlJPUgMCAwIDAgJJTlRFUk5BTF9QUk9DRVNTX0RFQklUX05PTl9SRUNPVkVSQUJMRQMD

As a # in a URL mark an anchor, the changing of it don't trigger a page load as your bas url (foo.com/) stay the same. 由于URL中的#号标记为锚,因此更改它不会触发页面加载,因为您的基本url(foo.com/)保持不变。 The window.location.href isn't ment to hadle anchor change. window.location.href不能改变强锚。

If you whant to change the "anchor" part, you must use the window.location.hash for it to be detected (as in your second exemple) 如果要更改“锚点”部分,则必须使用window.location.hash使其被检测到(如第二个示例所示)

Every browser has a URL length limits! 每个浏览器都有一个URL长度限制! the shortest one is Internet Explorer which is 2083 characters! 最短的一个是Internet Explorer,它是2083个字符! Check it out here 在这里查看

And all webkit browsers Chrome, Safari, Mozilla has a limit of 100KB ! 并且所有的Webkit浏览器Chrome,Safari,Mozilla都有100KB的限制 You can get more details here 您可以在此处获得更多详细信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM