2

我正在尝试让retina.js 在我有CNAME 的子域的tumblr 上工作。

所以我有 blog.benwhitla.com 使用 CNAME 指向 benwhitla.tumblr.com,正如 tumblr 建议的那样。我想托管普通和@2x 静态内联图像,并使用retina.js 将视网膜图像自动显示在视网膜显示器上。要使retina.js 工作,图像必须与js 文件位于同一域或子域中。

在此处找到关于此的视网膜.js 讨论:https ://github.com/imulus/retinajs/issues/40

所以按照这个想法,我创建了一个子域:i.blog.benwhitla.com。因为看起来retina.js 应该能够在当前域的子域中抓取图像,所以我希望这可以工作。

在这里测试:http: //benwhitla.com/client/retina/

第一个图像在外部托管,并且不起作用 - 这是预期的。第二张图片与 html 和 js 位于相同的位置,并且工作正常。第三张图片托管在 i.blog.benwhitla.com 上,从技术上讲,它是 benwhitla.com 的子域,所以我预计视网膜图像会拉出,但事实并非如此。

也许两个子域对于retina.js 来说太多了,无法支持?

有任何想法吗?这两天我一直在用头撞墙。

我还尝试对所有内容(css、图像和 js)使用相对路径,例如:

//i.blog.benwhitla.com

但这没有任何区别。

谢谢您的帮助。

编辑: 开始使用retina.js的分叉版本,它应该实际上支持上面链接的github问题中的子域(我不能在stackoverflow中添加超过2个链接)。

但它会引发以下错误,即使我将 document.domain 定义为 benwhitla.com。

XMLHttpRequest cannot load http://i.blog.benwhitla.com/img/benwhitla@2x.png. Origin http://blog.benwhitla.com is not allowed by Access-Control-Allow-Origin.

编辑 不允许在这里回答我自己的问题,所以这就是我现在所处的位置,这不是一个好的修复,但它至少会提取图像:

好吧,我确定这是错误的方法,但是使用允许子目录的较新脚本,并将本节中的所有 FALSE 更改为 TRUE,它现在可以工作了。虽然现在可能不安全?

  RetinaImagePath.prototype.check_2x_variant = function(callback) {
    var http, that = this;
    if (this.is_external()) {
      return callback(true);
    } else if (this.at_2x_path in RetinaImagePath.confirmed_paths) {
      return callback(true);
    } else {
      http = new XMLHttpRequest;
      http.open('HEAD', this.at_2x_path);
      http.onreadystatechange = function() {
        if (http.readyState != 4) {
          return callback(true);
        }

        if (http.status >= 200 && http.status <= 399) {
          if (config.check_mime_type) {
            var type = http.getResponseHeader('Content-Type');
            if (type == null || !type.match(/^image/i)) {
              return callback(false);
            }
          }

          RetinaImagePath.confirmed_paths.push(that.at_2x_path);
          return callback(true);
        } else {
          return callback(true);
        }
      }
      http.send();
    }    

此外,如果没有 @2x 图像,它现在会引发错误。

4

0 回答 0