@@ -363,26 +363,31 @@ var wombat_internal = function($wbwindow) {
363
363
}
364
364
365
365
//============================================
366
- // Define custom property
366
+ // Override a DOM property
367
367
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
+
368
381
try {
369
382
Object . defineProperty ( obj , prop , {
370
383
configurable : false ,
371
- // enumerable: true,
372
384
set : set_func ,
373
385
get : get_func
374
386
} ) ;
375
387
376
388
return true ;
377
389
} 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 ) ;
386
391
return false ;
387
392
}
388
393
}
@@ -757,15 +762,16 @@ var wombat_internal = function($wbwindow) {
757
762
def_prop ( $wbwindow . HTMLBaseElement . prototype , "href" , undefined , base_href_get ) ;
758
763
759
764
// 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
+ }
761
771
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 ) ;
765
774
}
766
-
767
- def_prop ( $wbwindow . HTMLElement . prototype , "baseURI" , undefined , get_baseURI ) ;
768
- def_prop ( $wbwindow . HTMLDocument . prototype , "baseURI" , undefined , get_baseURI ) ;
769
775
}
770
776
771
777
//============================================
0 commit comments