gpt4 book ai didi

javascript - BASE HREF、javascript 和 Internet Explorer 与 Firefox

转载 作者:技术小花猫 更新时间:2023-10-29 12:07:49 24 4
gpt4 key购买 nike

问题:

IE 和 Firefox/Safari 似乎以不同方式处理 BASE HREF 和 Javascript window.location 类型的请求。首先,这是对问题的准确描述吗?这是怎么回事?处理这种情况的最佳跨浏览器解决方案是什么?

上下文:

我有一个小型 PHP 平面文件 sitelet(它实际上是一个可用性测试原型(prototype))。

我在 PHP 中动态生成 BASE 标记的 HREF 值,即如果它在我们公司的服务器上运行,它是:

$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';

在我的本地开发机器上,它是:

$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';    

对于其中一项任务,我收集了一些用户输入,用 Javascript 对其进行了一些转换,然后使用如下代码发送到服务器:

function allDone() {
// elided code for simplicity of stackoverflow question
var URI = "ProcessUserInput.php?";
URI = URI + "alphakeys=" + encodeURI( keys.join(",") );
URI = URI + "&sortedvalues=" + encodeURI( values.join(",") );
window.location = URI;
}

javascript 文件(包含函数 allDone())和处理 PHP 脚本 (ProcessUserInput.php) 都位于 UsabilityTest 的子目录中。也就是说,他们的实际网址是

http://www.example.com/alpha/bravo/UsabilityTest/ 狐步舞/ProcessUserInput.php 又名

$basehref 。 '/foxtrot/ProcessUserInput.php'

问题

IE 的 JavaScript 基本上似乎忽略了 BASE HREF。 javascript 和 PHP 处理器位于同一目录中,因此对 ProcessUserInput.php 的调用工作正常。输入得到处理,一切正常。

但是当我在 Firefox 上测试时,JavaScript 确实似乎使用了 BASE HREF,因为脚本的输出被发送到

$basehref . '/ProcessUserInput.php'

这中断了,因为 ProcessUserInput.php 位于 basehref 的子目录中。但是,如果我将子目录名称添加到 javascript,它将不再在 IE 中工作。

解决方案?

我可以想出几种方法来解决这个问题:

  • 在 Javascript 中,读取 BASE 标记的 HREF 属性并手动添加到 javascript 中的 var URI 中,调用完全解析的绝对 URL
  • 用 PHP 处理 .js 文件并将 $basehref 变量插入脚本
  • 移动文件
  • 还有别的吗?

我相信肯定还有其他方法可以解决这个问题。当 IE 和 Firefox 在 JavaScript 中以不同方式应用 BASE HREF 时,在 JavaScript 中处理 BASE HREF 的最佳方式是什么?

最佳答案

使用 window.location 的 assign 方法似乎是最直接的答案。

代替

window.location = URI;

我正在使用这个:

window.location.assign( URI ); 

这在 IE 和 Firefox 中都是正确的。

关于javascript - BASE HREF、javascript 和 Internet Explorer 与 Firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com