Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What’s the difference between <a href="url"> and window.location = "url" on iOS?

I have an HTML 5 app that runs on mobile devices including the iPad. I want to create a link to a non-HTML file, and have the proper application open to handle the file. The files are .acsm files, to be opened in Bluefire.

If I create the link as a simple <a href="url"> tag, it works.

If instead I use Javascript to set the window.location, it doesn't work. The iPad pops an alert that says, "Download failed: This file cannot be downloaded".

I've experimented with other file types, and haven't found anything conclusive. What's the difference between the simple link and the Javascript technique? Can I make the Javascript code do the same thing as the link?

In case the specific Javascript details matter, I do it like this with jQuery:

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

and the HTML looks like:

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

(Note that this is a span with an href, I can change the HTML if that would help.)

like image 200
Ned Batchelder Avatar asked Aug 03 '11 19:08

Ned Batchelder


People also ask

What can I use instead of window location href?

Location assign() Method location. replace("http://someUrl.com");

Does window location href work in mobile?

location. href and click() methods doesn't work on mobile phone. Bookmark this question.


2 Answers

Try window.open, passing in "_self" as the target window name.

window.open(there, "_self");

Using "_self" is the critical part here, otherwise the popup blocker would intercept it. I'd test this, but I don't have a link to an acsm file.

Edit: Two more ideas:

Add a form to your page with a method of "GET" and an action of your acsm file. Exclude form fields unless they map appropriately to your URL.

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

Then just submit your form with form.submit():

document.forms.acsm.submit();

And the other idea: Create a page on your server that does a server-side redirect to your acsm file. Then just use the usual location.href = url to that server page.

like image 63
gilly3 Avatar answered Nov 15 '22 22:11

gilly3


create a new a tag and click it using jquery:

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

the a tag in this case will not be added to DOM, will only be used to simulate the click.

like image 31
memical Avatar answered Nov 15 '22 22:11

memical