Window Redirect Not Redirecting - javascript

I had an earlier question that was related to this problem, although that is fixed a new error has appeared. I have some code that checks if the user is visiting my site via a mobile device. If they do, then I do a simple redirect. However, when the code executes I am not redirected. I know the code runs but no redirect occurs. Instead, some of my javascript code breaks, though no errors appear on my console. You would think Moore's law would have mercy on me.
What's wrong and how could I fix this?
// device.mobile() give me true on false on whether device is mobile
if (device.mobile()) {
window.location.href = "https://itunes.apple.com";
}

Try just location.href
window.location.href can be buggy on some mobile devices (ios).

Related

Firefox: unblock JavaScript alerts on specific website

I have entered code into the developer console here on StackOverflow to test some code that shows an alert(); on focus and switched between tabs. Then I clicked the message away but it immediately returned because the window.onfocus event seemed to have turned into an infinite loop. I was writing an answer for which I wanted to test the code and that's why I didn't want to reload the page as all progress would be lost. So I clicked the checkbox "Block future requests from stackexchange.com" that was displayed when the message popped up the second time and got rid of the message by doing so.
Now I have a problem: If I now want to cause an alert();, I get no alert and the return value is undefined, without any error.
I then searched the internet on how to unblock js alerts in firefox but the only thing I found that came even close to what I need was a ton of tutorials on how to unblock WebPush requests.
Is there a way to unblock alert();s? If it involves about:config or manually editing config files, no problem.
I am on Linux Mint, so Windows paths to those files won't help me. But you can include them for Windows users who might read this and have the same problem.
This is the code I entered:
window.onfocus = function() { alert('example'); return; };
Restarting Firefox helps, but for me a reboot of my whole laptop was also necessary (maybe because I didn't restart either Firefox or my computer within the last two weeks?).
Thanks to #Felix Kling for the help, you can find his comment here: Firefox: unblock JavaScript alerts on specific website

Window location href change does not reload

UPDATE
I have some code that checks if the user is visiting my site via a mobile device. If they do, then I do a simple redirect. However, when the code executes I am not redirected. I know the code runs but no redirect occurs. Instead, some of my javascript code breaks, though no errors appear on my console. You would think Moore's law would have mercy on me.
What's wrong and how could I fix this?
// device.mobile() give me true on false on whether device is mobile
if (device.mobile()) {
window.location.href = "https://itunes.apple.com";
}
its wrong address use this
"https://itunes.apple.com";
note: best way for checking your javascript code is javascript console
(Alt-Shift+j in google chrome)

Creating a tweet button without opening a new window

I'm looking to add a "tweet this" button to a site. Simple enough, right? The catch is that the site is meant to run on an embedded platform that doesn't particularly handle popup windows, so I'm trying to do everything inside the page.
I'm able to successfully create my tweet button, attach an onClick handler to it, and construct a proper twitter.com/share URL for the relevant content. All works fine when I open that URL in a new window with window.open. However, if I try to open the URL in an iframe, nothing loads inside the frame. Even loading http://twitter.com into the iframe fails in the same way. However, loading Google or any other website seems to work just fine.
Any thoughts on what I'm missing here? Thanks! --zach
Edit:
Yep, they are detecting the iframe on load and blanking the page:
if (window.top !== window.self) {
document.write = "";
window.top.location = window.self.location;
setTimeout(function(){ document.body.innerHTML='';},1);
window.self.onload=function(evt){document.body.innerHTML='';};
}
Any reasonable way to get around this, or am I stuck writing my own auth pipeline through oauth? I don't need anything from their API, just letting users tweet to their own accounts.
Twitter (like Stack Overflow) is probably using some Javascript to ensure they're not being presented in an iFrame:
if(top!=self){
//hates you
}
I ran into something similar recently, and ended up re-doing part of my app without the iFrame element.
Go and get a developper account on twitter and things are made easy for you :)
Can you simply redirect the the twitter share URL? I'm guessing they want to be careful about opening the window in iframe's to prevent malicious sites from tweeting in a user's account without giving the user a chance to first confirm their intent to send this tweet.
You said window.open worked fine for popping up the url in a new window but have you tried popping it into the parent frame?
twtWindow=window.open([url],'_parent',[specs])
#yuval Unfortunately for you, the twitter url goes to a page that has the X-FRAME-OPTIONS:SAMEORIGIN header set in the response. It's not a Javascript check. The browser will simply refuse to render the page after seeing the header. This is done to prevent a clickjacking attack, usually done to steal a user's password.
So your only other option is really to redirect your current page with window.location.href=url.

Full Ajax site, redirecting from "normal" URL to Ajax (fragment) URL automatically?

Ok, so all the rage these days is having a site like this:
mysite.com/
mysite.com/about
mysite.com/contact
But then if the user has Javascript enabled, then to have them browse those pages with Ajax:
mysite.com/#/
mysite.com/#/about
mysite.com/#/contact
That's all well and good. I have that all working perfectly well.
My question is, if the user arrives at "mysite.com/about", I want to automatically redirect them to "mysite.com/#/about" immediately if they have Javascript.
I have it working so if they arrive at "mysite.com/about", that page will load fine on its own (no redirects) and then all clicks after that load via ajax, but the pre-fragment URL doens't change. e.g. if they arrive on "mysite.com/about" and then click "contact", the new URL will be "mysite.com/about#/contact". I really don't like that though, it's very ugly.
The only way I can think of to automatically redirect a user arriving at "mysite.com/about" to "mysite.com/#/about" is to have some javascript in the header that is ONLY run if the page is NOT being loaded via ajax. That code looks like this ($ = jQuery):
$(function(){
if( !location.hash || location.hash.substr(1,1) != '/' ) {
location.replace( location.protocol+'//'+location.hostname+'/#'+location.pathname+location.search );
}
});
That technically works, but it causes some very strange behavior. For example, normally when you "view source" for a page that has some ajax content, that ajax content will not be in the source because you're viewing the original page's source. Well, when I view source after redirecting like this, then the code I see is ONLY the code that was loaded via Ajax - I've never seen anything like that before. This happens in both Firefox 3.6 and Chrome 6.0. I haven't verified it with other browsers yet but the fact that two browsers using completely different engines exhibit the same behavior indicates I am doing something bad (e.g. not just a bug with FF or Chrome).
So somehow the browser thinks the page I'm on "is" the Ajax page. I can continue to browse around and it works fine, but if I e.g. close Firefox and re-open it (and it re-opens the pages I was on), it only reloads the Ajax fragment of the page, and not the whole wrapper, until I do a manual refresh. (Chrome doesn't do this though, only Firefox). I've never seen anything like that.
I've tried using setTimeout so it does not do the redirect until after the page has fully loaded, but the same thing happens. Basically, as far as I can tell, this only works if the fragment is put there as the result of a user action (click), and not automatically.
So my question is - what's the best way to automatically redirect a Javascript capable browser from a "normal" URL to an Ajax URL? Anyone have experience doing this? I know there are sites that do this - e.g., http://rdio.com (a music site). No weirdness happens there, but I can't figure out how they're doing it.
Thanks for any advice.
This behavior is like the new twitter. If you type the URL:
http://twitter.com/dinizz
You will be redirected to:
http://twitter.com/#!/dinizz
I realize that this is done, not with javascript but in the server side. I am looking for a solution to implements this using ruby on rails.
Although I suggest you to take a look on this article: Making AJAX Applications Crawlable

window.onbeforeunload message localization

I'm using a page unload trigger to warn the user of unsaved changes while leaving the page/closing the tab/etc... and this works fine.
//Exit event
if (!changes_saved) {
window.onbeforeunload = confirmExit;
}
function confirmExit()
{
return "Your changes will be lost if you leave this page!";
}
My problem is that the browser (both Firefox and IE) enwraps the custom message with
"Are you sure you want to navigate away from this page" in the beginning and with "Press OK to continue, or Cancel to stay on current page." at the end.
My question:
is there any way to avoid this and completely customize the message in the dialog?
Need for this isn't abstract, I'm developing a multi language interface and localized message mixed with the enforced one just looks silly.
Thank you.
This question has been asked before.
Apparently, modifying this standard dialog is not possible because of browser security. If it were possible, it would allow a malicious site to fool you into staying on a page.
However, the language of the message is based on the language settings of the user's machine just like any other standard dialog.
I am afraid this is not possible. Had the same problem once, googled around for it and found a link on the msdn saying it cannot be done (for IE atleast which I was concerned about by then).
I can't find this link again though.

Categories