Erica Stockwell-Alpert
Erica Stockwell-Alpert

Reputation: 4863

Openseadragon with XML document variable instead of URL?

What is the correct way to open a SeaDragon viewer with straight XML data? I need to know what I'm doing wrong here. I have a bunch of DZI images that are hosted on another domain that I need to display, but I can't do a simple OpenSeadragon() call with the appropriate URLs because the domain the images are on has no "Access-Control-Allow-Origin" header. As such, I've set up a proxy controller to retrieve the XML data and pass that back to my web page. However, I can't get the images to load with the XML data.

I've been using a working image (from a different website) to test the issue and figure out what I need to do. When I use the following code, the image displays:

var viewer = OpenSeadragon({
    id: "openseadragon1",
    prefixUrl: "../../Scripts/openseadragon/images/", 
    tileSources: "https://familysearch.org/dz/v1/TH-1971-27860-10353-27/image.xml?ctx=CrxCtxPublicAccess&session" 
});

Now I'm trying to display the image the way I am with my Proxy controller, by retrieving the XML and using the XML in my OpenSeadragon call:

  var ajaxresult = $.ajax({
      url: "https://familysearch.org/dz/v1/TH-1971-27860-10353-27/image.xml?ctx=CrxCtxPublicAccess&session",
      type: 'get',
      success: function (data) {

          // data is an XMLdocument object

          var viewer = OpenSeadragon({
          id: "openseadragon1",
          prefixUrl: "../../Scripts/openseadragon/images/",
          tileSources: data
       });
   },
      error: function (jqXHR, textStatus, errorThrown) {
          alert(jqXHR.responseText || textStatus);
       }
  });

I get a blank image and my console says that every tile failed to load. I have also tried pasting the xml directly into the tileSources field as a string, like this:

tileSources: '<?xml version="1.0" encoding="utf-8"?><Image TileSize="256" Overlap="1" Format="jpg" ServerFormat="Default" xmlns="http://schemas.microsoft.com/deepzoom/2009"> <Size Width="6233" Height="4683" /></Image>'

but that doesn't work either.

What am I doing wrong here?

Upvotes: 1

Views: 851

Answers (2)

Erica Stockwell-Alpert
Erica Stockwell-Alpert

Reputation: 4863

I found a way to resolve the issue. Because my images were hosted on an S3 account, I discovered that I could log into the account and add CORS configuration to each of the image buckets. So, no need to use Ajax to pull the XML; once I added CORS to the buckets, I was able to put the URLs in the OpenSeadragon call directly.

Upvotes: 1

iangilman
iangilman

Reputation: 2174

Unfortunately OpenSeadragon does not yet support passing the XML directly; you'll have to break apart the info. See the answer here:

https://github.com/openseadragon/openseadragon/issues/460

Upvotes: 0

Related Questions