【问题标题】:Permission Denied calling javascript function权限被拒绝调用javascript函数
【发布时间】:2014-10-04 12:44:13
【问题描述】:

我正在尝试使 ie7-js 与我的 wordpress 安装一起工作。在阅读了这个库之后,它似乎是一个很好的解决方案,可以让我的网站更兼容旧版本的 IE,尤其是 IE8。尝试并仍然支持这样的旧浏览器可能看起来很奇怪,但我注意到每月有数百名访问者正在使用像 IE6 一样旧的浏览器访问我们的网站。我们的大多数用户都是老年人,并且仍在使用 Windows XP。现在解决问题。

我正在运行来自modern.ie 的带有IE8 的Windows XP 虚拟机的副本,我已按照库代码页上有关如何包含该文件的说明进行操作。我正在尝试让特定的 IE9.js 文件正常工作。当我在 IE8 中访问页面时出现错误

permission denied: line 850 character 37

我已经追踪到下面一行:

for (var i = 0, imported; i < styleSheet.imports.length; i++)

来自这个函数:

function getCSSText(styleSheet, path, media, level) {
      var cssText = "";
      if (!level) {
        media = toSimpleMedia(styleSheet.media);
        level = 0;
      }
      if (media === "none") {
        styleSheet.disabled = true;
        return "";
      }
      if (media === "all" || media === self.media) {
        // IE only allows importing style sheets three levels deep.
        // it will crash if you try to access a level below this
        try {
          var canAcess = !!styleSheet.cssText;
        } catch (exe) {}
        if (level < 3 && canAcess) {
          var hrefs = styleSheet.cssText.match(IMPORTS);
          // loop through imported style sheets
          for (var i = 0, imported; i < styleSheet.imports.length; i++) {
            var imported = styleSheet.imports[i];
            var href = styleSheet._href || styleSheet.href;
            imported._href = hrefs[i].replace(TRIM_IMPORTS, "");
            // call this function recursively to get all imported style sheets
            cssText += getCSSText(imported, getPath(href, path), media, level + 1);
          }
        }
        // retrieve inline style or load an external style sheet
        cssText += encode(styleSheet.href ? loadStyleSheet(styleSheet, path) : styleSheet.owningElement._cssText);
        cssText = parseMedia(cssText, self.media);
      }
      return cssText;
    };

在研究是否有其他人遇到过同样的问题后,我确实找到了posts,但没有人找到解决方案。几个小时以来,我一直试图解决这个问题,结果却把头撞在桌子上。有没有人有可能的解决方案或接下来要检查的事情?我尝试将文件权限更改为 777,但这似乎也不起作用。

【问题讨论】:

  • 您可能已经想到了这么多,但这似乎是访问某些 *.css 文件的权限问题。您的页面 URL 的样式是什么,您导入的样式表的 URL 是什么? (不打算点击它,但 URL 的一些大差异可能会导致问题)
  • 文件夹权限不会直接影响前端脚本的性能,所以这没有意义。也许你的问题是烫发“框架”或“网址”。
  • 我注意到头部中的一些 URL 是使用绝对路径调用的,而其他的则包含一个 href 链接,例如 href='//example.com/wp-content/themes/vivacity/assets/css/stylesheet.css' 请注意 http: 已被省略
  • 我刚刚在这里读到一篇文章,说某些版本的 IE 会下载两次样式表。我想知道这是否会导致问题?我需要尝试追踪这些 css 文件在代码中被调用的位置以添加协议。这可能需要一段时间.....stevesouders.com/blog/2010/02/10/…
  • @GuilhermeNascimento 我已将它们设为绝对网址。我注意到我从谷歌中提取了一些样式表。不确定这是否会影响任何事情。

标签: javascript css internet-explorer internet-explorer-8


【解决方案1】:

旧版浏览器在客户端使用 CORS 时存在限制。

不是他的 javascript 中的“错误”,客户端无法纠正。

最好的方法是使用拥有CORS 权限的CDNs

但仍然可能很困难,因此另一种选择是将所有 CSS 放在您(或您自己的域)的子域中。

了解 CORS:

【讨论】:

  • 是的,这就是我在评论中想到的怀疑。这个想法基本上是攻击者可以使用样式表和对它们的 JavaScript 访问,作为与外部站点(他们自己的站点、访问包含数据的站点或其他方式)的通信方法。 IE 可能会允许样式表,但不允许您在 JS 中查看它。
猜你喜欢
  • 1970-01-01
  • 2013-04-21
  • 2022-11-05
  • 2012-07-07
  • 1970-01-01
  • 2015-08-30
  • 2017-09-18
相关资源
最近更新 更多