【发布时间】:2010-10-12 13:26:50
【问题描述】:
问题:
IE 和 Firefox / Safari 处理 BASE HREF 和 Javascript window.location 类型请求的方式似乎不同。首先,这是对问题的准确描述吗?这是怎么回事?处理这种情况的最佳跨浏览器解决方案是什么?
上下文:
我有一个小的 PHP 平面文件 sitelet(它实际上是一个可用性测试原型)。
我在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 的子目录中。换句话说,它们的实际 URL 是
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/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 的最佳方法是什么?
【问题讨论】:
标签: javascript html href