<a href="url"> and window.location = &#34;url&#34; on iOS?</a>之间有什么区别?

时间:2011-08-03 19:09:53

标签: jquery ios html5 browser

我有一个HTML 5应用程序,可在包括iPad在内的移动设备上运行。我想创建一个指向非HTML文件的链接,并打开正确的应用程序来处理该文件。这些文件是.acsm文件,将在Bluefire中打开。

如果我将链接创建为简单的<a href="url">标记,则可以正常使用。

如果我使用Javascript来设置window.location,它就不起作用了。 iPad会弹出一条警告,提示“下载失败:无法下载此文件”。

我已经尝试过其他文件类型,但没有找到任何结论。简单链接和Javascript技术之间有什么区别?我可以使Javascript代码与链接做同样的事情吗?

如果特定的Javascript细节很重要,我会用jQuery这样做:

$('.native-launch').live('click', function (evobj) {
  var there = $(evobj.target).attr('href');
  window.location.href = there;
  return false;
});

,HTML看起来像:

<span class="catalog-list-button native-launch" href="url">Read in another app</span>

(请注意,这是一个带有href的跨度,如果有帮助,我可以更改HTML。)

7 个答案:

答案 0 :(得分:6)

尝试window.open,传入“_self”作为目标窗口名称。

window.open(there, "_self");

使用“_self”是关键部分,否则弹出窗口阻止程序会拦截它。我测试了这个,但是我没有指向acsm文件的链接。

修改:还有两个想法:

使用“GET”方法和acsm文件的操作向页面添加表单。排除表单字段,除非它们适当地映射到您的网址。

<form id="acsm" method="GET" action="http://myserver.com/myfile.acsm"></form>

然后只需使用form.submit()

提交表单
document.forms.acsm.submit();

另一个想法是:在服务器上创建一个页面,该页面将服务器端重定向到您的acsm文件。然后只需使用通常的location.href = url到该服务器页面。

答案 1 :(得分:4)

创建一个新的标签并使用jquery点击它:

$("<a />").attr("href", there).click();

本案例中的a标签不会添加到DOM中,只会用于模拟点击。

答案 2 :(得分:1)

对我来说,这似乎是一个Safari漏洞。 如果你写window.location:Safari期望一个html文件或它可以实际显示的任何类型的文件。

当您单击链接时,它会读取内容类型,然后决定在同一窗口中打开它或打开它的应用程序。

我认为你应该尝试用url打开一个弹出窗口。它理论上应该有效。

答案 3 :(得分:1)

使用JS函数window.location,浏览器希望使用浏览器打开文件,而不是使用任何其他程序。但是使用A-Tag可以链接到某些东西。这可以是任何文件。如果浏览器不知道文件的类型,浏览器会提示弹出窗口以下载文件。如果该文件是例如HTML文件,则浏览器打开该文件并显示它。

使用JS下载文件是link

答案 4 :(得分:0)

我认为如果某种类型的屏幕阅读器试图解析您的页面,链接会更好。如果您的导航是在javascript中,那么类似的东西就无法告诉视障用户正在发生什么。

顺便说一句,而不是来自您的事件处理程序的return false;。做evobj.preventDefault(),这是阻止事件冒泡的首选方式。

答案 5 :(得分:0)

根据HTML5 spec,span元素只能包含global attributes,其中不包含 href 。因此,从属性获取的值可能格式不正确或与 window.location.href 接受的类型不兼容。我不确定这是否与这个问题有关。

您是否尝试过分配window.location.href = "http://example.com/file"等常量字符串?

答案 6 :(得分:0)

如果这是iOS的错误,请模拟链接上的点击。与memical的解决方案不同,这不会冒泡:

var a = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
a.href = your_url_here;
var click = document.createEvent("Event");
click.initEvent("click", false /*bubbles*/, true /*cancellable*/);
a.dispatchEvent(click);