Skip to content

Commit cd23903

Browse files
committed
Merge pull request #153 from robertknight/safari-dom-fixes
Fix Wombat in Safari 9
2 parents bb8f384 + 5208117 commit cd23903

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

pywb/static/wombat.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -363,26 +363,31 @@ var wombat_internal = function($wbwindow) {
363363
}
364364

365365
//============================================
366-
// Define custom property
366+
// Override a DOM property
367367
function def_prop(obj, prop, set_func, get_func) {
368+
// if the property is marked as non-configurable in the current
369+
// browser, skip the override
370+
var existingDescriptor = Object.getOwnPropertyDescriptor(obj, prop);
371+
if (existingDescriptor && !existingDescriptor.configurable) {
372+
return;
373+
}
374+
375+
// if no getter function was supplied, skip the override.
376+
// See https://github.com/ikreymer/pywb/issues/147 for context
377+
if (!get_func) {
378+
return;
379+
}
380+
368381
try {
369382
Object.defineProperty(obj, prop, {
370383
configurable: false,
371-
// enumerable: true,
372384
set: set_func,
373385
get: get_func
374386
});
375387

376388
return true;
377389
} catch (e) {
378-
var info = "Can't redefine prop " + prop;
379-
console.warn(info);
380-
//f (obj && obj.tagName) {
381-
// info += " on " + obj.tagName;
382-
//}
383-
//if (value != obj[prop]) {
384-
// obj[prop] = value;
385-
//}
390+
console.warn('Failed to redefine property %s', prop, e.message);
386391
return false;
387392
}
388393
}
@@ -757,15 +762,16 @@ var wombat_internal = function($wbwindow) {
757762
def_prop($wbwindow.HTMLBaseElement.prototype, "href", undefined, base_href_get);
758763

759764
// Shared baseURI
760-
var orig_getter = $wbwindow.document.__lookupGetter__("baseURI");
765+
var orig_getter = get_orig_getter($wbwindow.Node, "baseURI");
766+
if (orig_getter) {
767+
var get_baseURI = function() {
768+
var res = orig_getter.call(this);
769+
return extract_orig(res);
770+
}
761771

762-
var get_baseURI = function() {
763-
var res = orig_getter.call(this);
764-
return extract_orig(res);
772+
def_prop($wbwindow.HTMLElement.prototype, "baseURI", undefined, get_baseURI);
773+
def_prop($wbwindow.HTMLDocument.prototype, "baseURI", undefined, get_baseURI);
765774
}
766-
767-
def_prop($wbwindow.HTMLElement.prototype, "baseURI", undefined, get_baseURI);
768-
def_prop($wbwindow.HTMLDocument.prototype, "baseURI", undefined, get_baseURI);
769775
}
770776

771777
//============================================

0 commit comments

Comments
 (0)