Bug #2885


Use of URI.js

Added by Debbie Lockett over 7 years ago. Updated over 6 years ago.

Start date:
Due date:
% Done:


Estimated time:
Applies to JS Branch:
Fix Committed on JS Branch:
Fixed in JS Release:
SEF Generated with:
Contact person:
Additional contact persons:


To what extent is this library still used? Can its use be replaced, and the library removed from the built SaxonJS.js?

See comments in the documentation:!conditions/third-party-components

Actions #1

Updated by Michael Kay about 7 years ago

I believe the places we use the URI library are:

(a) to implement the resolve-uri() function (CoreFn.js)

(b) in DOMUtils, (baseURI function) to test whether a URI is absolute (and then resolve it if not)

(c) when initiating the transformation, to resolve the supplied stylesheet URI against the URI of the HTML page

When we're in the browser, I think it makes sense to try the resolve-uri() method given here:


function resolve(url, base_url) {
  var doc      = document
    , old_base = doc.getElementsByTagName('base')[0]
    , old_href = old_base && old_base.href
    , doc_head = doc.head || doc.getElementsByTagName('head')[0]
    , our_base = old_base || doc_head.appendChild(doc.createElement('base'))
    , resolver = doc.createElement('a')
    , resolved_url
  our_base.href = base_url || '';
  resolver.href = url;
  resolved_url  = resolver.href; // browser magic at work here

  if (old_base) old_base.href = old_href;
  else doc_head.removeChild(our_base);
  return resolved_url;

This essentially adds a <base> element to the header of the HTML page, and creates an <a> element containing the relative URI, and then piggy-backs on the fact that the browser knows how to resolve relative URIs in <a> elements.

We should give this a try. We would still need to use the URI.js library in non-browser environments.

Actions #2

Updated by Michael Kay about 7 years ago

  • Tracker changed from Feature to Bug
Actions #3

Updated by Debbie Lockett about 7 years ago

  • Status changed from New to Resolved

BrowserPlatform now has resolveUri method as suggested above. (Note that the JSTestDriver platform used for Nashorn also has a resolveUri method.)

The use of URI.js has now been removed, basically we now use this platform resolveUri method:

(a) resolve-uri() function in CoreFn.js: now does some basic testing that the supplied parameters are valid, then uses the platform.resolveUri method.

(b) baseURI() method in DomUtils: added DomUtils.isAbsoluteURI method which uses regex to check that a string is an absolute URI. Then use platform.resolveUri

(c) initiating transform: in browser uses resolveUri

Actions #4

Updated by Debbie Lockett almost 7 years ago

  • Status changed from Resolved to Closed
  • % Done changed from 0 to 100
  • Fixed in version set to 0.9.1

Bug fix applied in the Saxon-JS 0.9.1 beta release.

Actions #5

Updated by Community Admin over 6 years ago

  • Fixed in JS Release set to Saxon-JS 0.9.1
  • Applies to JS Branch 0.9 added
  • Fix Committed on JS Branch 0.9 added

Please register to edit this issue

Also available in: Atom PDF Tracking page