bind is not working in safari 5.1.1 - javascript

I'm using safari 5.1.1 in my system and my application is also running in safari 5.1.1. In my application i'm using window resize event with bind method. Its working fine all other browsers like ie, chrome,firefox but it doesn't work in safari 5.1.1 and less. whenever its run it will through an exception as '"undefined" is not a function({....}.bind(this);...'.
I have searched more about this issue but i din't found any solutions to recover this issue.
$(window).resize(function () {
alert("resized");
...My code goes 'this' here....
}.bind(this));
Is there any way to resolve this issue?
Thanks,
KarthiK

The error most likely comes from .bind(this). As you see in the MDN docs about Function.prototype.bind, safari supports bind in versions >= 5.1.4.
You can use jQuery.proxy instead.
var resizeHandler = function() { alert('resized'); };
$(window).resize($.proxy(resizeHandler, this));
Did not test the example but it should look like this.

Related

resize javascript error in chrome

$(window).on('resize', function(){
self.setDimensions();
});
Uncaught TypeError: Object # has no method 'on'
Why is only google chrome throwing this error?
and how can I fix it?
No need to use event delegation (on) here. Just bind the resize event directly to the window:
$(window).resize(function () {
self.setDimensions();
});
I could replicate your error when using an older version of jQuery (1.6.4).
Working (1.8.2)
Working (1.7.2)
Not Working (1.6.4)
Try to make sure you're using a recent version of jQuery and not an older, perhaps cached version.

jquery 1.7 "on" method IE8 crashes mshtml.dll

As mentioned I'm using latest version of jQuery.
I simply call
$('table').on('click', 'tr', function() {
alert('click');
});
It runs well on every browser except IE8 (not tested on IE7).
Note I'm running Windows on Parallels Desktop on my iMac.
The crash has something to do with mshtml.dll as reported by IE8 Crash dialog box.
Any advice?
Check the jsFiddle here: http://jsfiddle.net/powtac/kuht6/4/
is working fine here something else could be wrong
http://jsfiddle.net/5Hhmg/

Does onHashChange work in Safari?

Does onHashChange or hashChange work in Safari? I tested it with Safari 4.0.4 on Windows 7 and it doesn't work for me.
If it doesn't work, is there any solution to track if the hash has changed?
In our app we poll to check for changes:
$b.hashCheck = setInterval(
function(){
if ( window.location.hash !== $b.C.current_hash){
$b.C.current_hash = window.location.hash;
//call the on change action here
}
},$b.C.hashCheckDelay
);
$b is the global object we use for our namespace and hashCheckDelay was empirically set at 120ms.While it looks a bit sad to do this kind of process, there isn't any performance issue on any browser we tested.
In Safari 4.0.4 it's not working yet but in the latest one works fine. And I didn't find any acceptable solutions to track if the hash has changed for those browsers which don't support onHashChange.

window.onbeforeunload not working on the iPad?

Does anyone know if the onbeforeunload event is supported on the iPad and/or if there's a different way to use it?
I've tried pretty much everything, and it seems like the onbeforeunload event is never triggered on the iPad (Safari browser).
Specifically, this is what I've tried:
window.onbeforeunload = function(event) { event.returnValue = 'test'; }
window.onbeforeunload = function(event) { return 'test'; }
(both of the above together)
window.onbeforeunload = function(event) { alert('test')'; }
(all of the above functions but inside <body onbeforeunload="...">
All of these work on FF and Safari on the PC, but not on the iPad.
Also, I've done the following just after loading the page:
alert('onbeforeunload' in window);
alert(typeof window.onbeforeunload);
alert(window.onbeforeunload);
Respectively, the results are:
true
object
null
So, the browser does have the property, but for some reason it doesn't get fired.
The ways I try to navigate away from the page are by clicking the back and forward buttons, by doing a google search in the top bar, by changing location in the address bar, and by clicking on a bookmark.
Does anyone have any idea about what's going on? I'd greatly appreciate any input.
Thanks
This bit of JavaScript works for me on Safari and Chrome on ipad and iphone, as well as desktop/laptop/other browsers:
var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i);
var eventName = isOnIOS ? "pagehide" : "beforeunload";
window.addEventListener(eventName, function (event) {
window.event.cancelBubble = true; // Don't know if this works on iOS but it might!
...
} );
I have found that the onunload() event does fire. It's behavior is somewhat odd; whatever you have in your callback function attached to the event is actually run after the new page has loaded in the background (You can't tell it's loaded yet, but server logging will show that it has).
More oddly, if you have a confirm() call in your onunload(), and the user has clicked a link to go somewhere else, you are in business. If, however, the user closes the iPad Safari browser tab, the onunload() event will fire, but your confirm() will have an implicit cancel as response.
Only Apple would know for sure, but my guess is that they purposely did not enable that functionality in mobile Safari because it is most often used by shady characters to get you to stay on their site or pop up lots of porn/advertising windows.
There's a known bug in WebKit with onbeforeunload. I believe it's fixed in the latest beta of Chrome 5, but it's quite possible the iPad's browser is made from a version of WebKit that doesn't have the fix.
Related Chrome bug report.
beforeunload event is not supported by Mobile Safari. You can see the list of all supported events here: Handling Events Apple documentation
And the beforeunload is not in the list!
https://code.google.com/p/chromium/issues/detail?id=97035
see hear.
alerts are no longer allowed during page dismissal events (beforeunload, unload, pagehide).
I think alerts, prompt, confirm, and other actions like these are also no longer allowed.
Here's a solution that should work on all modern browsers:
var unloaded = false;
window.addEventListener("beforeunload", function(e)
{
if (unloaded)
return;
unloaded = true;
console.log("beforeUnload");
});
window.addEventListener("visibilitychange", function(e)
{
if (document.visibilityState == 'hidden')
{
if (unloaded)
return;
unloaded = true;
console.log("beforeUnload");
}
});
Mobile browsers don't tend to not support beforeunload because the browser can go into the background without unloading the page, then be killed by the operating system at any time.
Most desktop browser contain a bug that causes visibilityState to not get called when the document unloads. See: here.
Therefore, it's important to include both events to cover all scenarios.
NB
I have used console.log instead of alert in my example because alert will get blocked by some browsers when called from beforeunload or visibilitychange.
If you just need to know if the page has been left you can use document.unload. It works fine in ios browsers. If you see on Apple documentation you'll find that it's deprecated and they recommend to use document.pagehide

onbeforeunload in Opera

I'm using the code that netadictos posted to the question here. All I want to do is to display a warning when a user is navigating away from or closing a window/tab.
The code that netadictos posted seems to work fine in IE7, FF 3.0.5, Safari 3.2.1, and Chrome but it doesn't work in Opera v9.63. Does anyone know of way of doing the same thing in Opera?
Thx, Trev
Opera does not support window.onbeforeunload at the moment. It will be supported in some future version, but has not been a sufficiently high priority to get implemented as of Opera 11.
onbeforeunload is now supported in Opera 15 based on the WebKit engine but not in any prior versions based on Presto.
Have you tried this?
history.navigationMode = 'compatible';
Reference, found via this page
I haven't actually tried it myself, but it looks promising.
Mobile Safari (iPhone/iPad) also doesn't support onbeforeunload, and I strongly suspect it is not likely to.
For detecting back/forward navigation there may be workarounds e.g. see Is there an alternative method to use onbeforeunload in mobile safari?.

Categories