Javascript 获取对现有OpenSeadragon查看器的引用

Javascript 获取对现有OpenSeadragon查看器的引用,javascript,openseadragon,Javascript,Openseadragon,我需要向现有的OpenSeadragon查看器对象添加一个覆盖,该对象不是由我的代码创建的,而是应用程序中的其他地方 我知道已经创建了查看器,因为我可以访问通过jQuery创建的各种html元素。但是,我无法确定是否有任何方法可以从现有引用创建查看器 我已尝试在中使用查看器div的id: var viewer = OpenSeadragon(id: "open-seadragon-viewer-id"); 但这似乎不起作用 有没有办法做到这一点,或者你只能在初始化它的代码中

我需要向现有的OpenSeadragon查看器对象添加一个覆盖,该对象不是由我的代码创建的,而是应用程序中的其他地方

我知道已经创建了查看器,因为我可以访问通过jQuery创建的各种html元素。但是,我无法确定是否有任何方法可以从现有引用创建查看器

我已尝试在中使用查看器div的id:

var viewer = OpenSeadragon(id: "open-seadragon-viewer-id");
但这似乎不起作用


有没有办法做到这一点,或者你只能在初始化它的代码中找到查看器?

这里有一个疯狂的想法。。。你可以用猴子修补OSD的某些部分,以便抓住查看器

var viewer;
var originalIsOpen = OpenSeadragon.Viewer.prototype.isOpen;

OpenSeadragon.Viewer.prototype.isOpen = function() {
  // Now we know the viewer!
  viewer = this;
  
  // Reinstate the original, since we only need to run our version once
  OpenSeadragon.Viewer.prototype.isOpen = originalIsOpen;
  
  // Call the original
  return originalIsOpen.call(this);
}
这有点俗气,但应该有用。注意:这假设页面上只有一个查看器。。。如果有多个,同样的原理也可以起作用,但您需要跟踪一组观众

顺便说一句,我使用的是isOpen,因为它很简单,每帧都会被调用。其他功能也可以发挥作用


编辑:固定的代码,所以我们使用的原型。我还没有实际测试这段代码,所以可能仍然有bug

我不知道有什么方法可以做到这一点(除非页面上的现有代码以某种方式将查看器存储在全局变量中)。不过,对于OSD来说,这是一个有趣的特性请求!如果你想继续下去的话,这应该不难补充,我很乐意为你指明正确的方向。不过,我认为这对您的情况没有帮助,因为您必须更新其他代码正在使用的OSD。