【问题标题】:Why can Chrome execute javascript on other pages but I can't?为什么 Chrome 可以在其他页面上执行 javascript 而我不能?
【发布时间】:2016-11-08 22:03:15
【问题描述】:

抱歉,如果这是一个迂回的方式来问这个问题,但我对网络和 javascript 的工作方式有点困惑。

我想做什么:在我找到的 url 列表的所有页面上执行 javascript。 (专门使用 jquery 从他们那里提取信息)

问题我无法在这些页面上执行 Javascript,因为它们不是我的并且没有 Access-Control-Allow-Origin 标头。所以我无法加载它们(使用 AJAX)以便在它们上使用 JQuery。

但是 Google Chrome 既可以加载页面,也可以在其上执行 javascript(使用他们的开发者控制台)。因此,如果我也想要,我可以转到每个页面,打开开发人员控制台,然后从那里提取信息。如果没有什么可以阻止 Chrome 访问这些,那我为什么要停止呢?而且,有没有办法解决这个问题?

谢谢,我希望我的描述是有道理的。我已经对此进行了一段时间的研究,但没有发现任何可以解释 CORS 看似不一致的原因。

【问题讨论】:

  • 因为……ajax受同源策略限制,但是你直接用浏览器访问页面没有这个限制……
  • 浏览器默认不允许站点 A 从站点 B 加载内容,因为用户可能已经登录到站点 B 并且可以访问站点 A 不应窃取的个人信息。正在进行工作以允许站点 A 从站点 B 匿名加载内容,以避免安全问题,但这尚未标准化。
  • @apsillers 我想我自己搞糊涂了,这是不可能的——the Fetch spec 中的 no-cors 选项允许来自 Service Worker 的跨域请求,但除非传递给适当来源的页面。哎呀。 crossorigin=anonymous 属性创建内部匿名跨域请求,就像我描述的那样,我认为 Fetch 规范正在扩展以描述该行为,但是 AFAIK 它不会通过公共 fetch API 公开,所以我说的是错误的。
  • 使用 tampermonkey 在任何域上运行您自己的脚本

标签: javascript jquery ajax google-chrome


【解决方案1】:

我可以转到每个页面,打开开发者控制台,然后从那里提取信息。如果没有什么可以阻止 Chrome 访问这些,那我为什么要停止呢?

你没有停下来。您,键盘上的人,可以完全按照您说的做,将每个页面作为顶级页面访问。

什么停止了——令人高兴的是——你碰巧在网络上运行的任何和所有脚本都具有与你所做的相同级别的可见性。根据您的 cookie 和网络拓扑,您可以对 Web 有独特的看法。你可以看到你家路由器的控制界面(192.168.1.1 或类似的)。您可以看到在 127.0.0.1 上运行的任何本地 Web 服务器。没有其他人可以看到这些。如果没有同源策略,那么您在 Web 上加载的任何脚本都可以检查这些。

还有,有没有办法解决这个问题?

如果您有一些您绝对信任的脚本(希望是“网络上存在的所有脚本”的重要子集),您希望能够绕过同源策略并查看您可以通过load them as an extension 对 Web 的完整跨域视图进行操作,它可以使用超出普通网页能力的提升权限进行操作。 (见How does Same Origin Policy apply to browser extensions?

【讨论】:

    【解决方案2】:

    我假设您希望从这些不属于您的页面中获取数据并将其存储在某个地方。我之前使用 php 使用 curl 完成了此操作。如果您希望显示这些站点以供用户以不同的方式进行交互,但从您的页面开始,您可以通过使用 curl 获取源 html 并将其呈现为一种代理来呈现这些页面。

    我已将本教程用于类似 https://www.youtube.com/watch?v=_kQN-3aNCeI 的内容。希望这能给你一个开始。我认为你应该在你的问题中更详细一点,以获得更多帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多