iOS上的<a href="url">和window.location ="url"有什么区别?

Ned*_*der 17 browser jquery html5 ios

我有一个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;
});
Run Code Online (Sandbox Code Playgroud)

HTML看起来像:

<span class="catalog-list-button native-launch" href="url">Read in another app</span>
Run Code Online (Sandbox Code Playgroud)

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

gil*_*ly3 6

尝试window.open,将"_self"作为目标窗口名称传递.

window.open(there, "_self");
Run Code Online (Sandbox Code Playgroud)

使用"_self"是这里的关键部分,否则弹出窗口拦截器会拦截它.我测试了这个,但是我没有到acsm文件的链接.

编辑:另外两个想法:

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

<form id="acsm" method="GET" action="http://myserver.com/myfile.acsm"></form>
Run Code Online (Sandbox Code Playgroud)

然后只需提交表格form.submit():

document.forms.acsm.submit();
Run Code Online (Sandbox Code Playgroud)

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


小智 1

对我来说,这似乎是 Safari 的一个错误。如果您编写 window.location :Safari 需要一个 html 文件或它实际上可以显示的任何类型的文件。

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

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