mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-24 06:59:52 +01:00
Merge pull request #153 from robertknight/safari-dom-fixes
Fix Wombat in Safari 9
This commit is contained in:
commit
cd2390333a
@ -363,26 +363,31 @@ var wombat_internal = function($wbwindow) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//============================================
|
//============================================
|
||||||
// Define custom property
|
// Override a DOM property
|
||||||
function def_prop(obj, prop, set_func, get_func) {
|
function def_prop(obj, prop, set_func, get_func) {
|
||||||
|
// if the property is marked as non-configurable in the current
|
||||||
|
// browser, skip the override
|
||||||
|
var existingDescriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
||||||
|
if (existingDescriptor && !existingDescriptor.configurable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no getter function was supplied, skip the override.
|
||||||
|
// See https://github.com/ikreymer/pywb/issues/147 for context
|
||||||
|
if (!get_func) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Object.defineProperty(obj, prop, {
|
Object.defineProperty(obj, prop, {
|
||||||
configurable: false,
|
configurable: false,
|
||||||
// enumerable: true,
|
|
||||||
set: set_func,
|
set: set_func,
|
||||||
get: get_func
|
get: get_func
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
var info = "Can't redefine prop " + prop;
|
console.warn('Failed to redefine property %s', prop, e.message);
|
||||||
console.warn(info);
|
|
||||||
//f (obj && obj.tagName) {
|
|
||||||
// info += " on " + obj.tagName;
|
|
||||||
//}
|
|
||||||
//if (value != obj[prop]) {
|
|
||||||
// obj[prop] = value;
|
|
||||||
//}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -757,15 +762,16 @@ var wombat_internal = function($wbwindow) {
|
|||||||
def_prop($wbwindow.HTMLBaseElement.prototype, "href", undefined, base_href_get);
|
def_prop($wbwindow.HTMLBaseElement.prototype, "href", undefined, base_href_get);
|
||||||
|
|
||||||
// Shared baseURI
|
// Shared baseURI
|
||||||
var orig_getter = $wbwindow.document.__lookupGetter__("baseURI");
|
var orig_getter = get_orig_getter($wbwindow.Node, "baseURI");
|
||||||
|
if (orig_getter) {
|
||||||
|
var get_baseURI = function() {
|
||||||
|
var res = orig_getter.call(this);
|
||||||
|
return extract_orig(res);
|
||||||
|
}
|
||||||
|
|
||||||
var get_baseURI = function() {
|
def_prop($wbwindow.HTMLElement.prototype, "baseURI", undefined, get_baseURI);
|
||||||
var res = orig_getter.call(this);
|
def_prop($wbwindow.HTMLDocument.prototype, "baseURI", undefined, get_baseURI);
|
||||||
return extract_orig(res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def_prop($wbwindow.HTMLElement.prototype, "baseURI", undefined, get_baseURI);
|
|
||||||
def_prop($wbwindow.HTMLDocument.prototype, "baseURI", undefined, get_baseURI);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================
|
//============================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user