控制台显示有关内容安全策略的错误和大量失败的 GET 请求

2023-12-15

我实际上正在开发我的第一个 Chrome 扩展程序即使运行顺利我收到了很多错误get()我用来检索一些数据的函数和关于代码安全性的恼人错误。

Here's a screenshot of the console log: Console Log

下面是涉及到的代码:

弹出窗口.html

<!doctype html>
<html>
<head>
    <title>NGI Little Helper - Subscribes</title>
    <link rel="stylesheet" href="popup.css">
    <!-- JavaScript and HTML must be in separate files for security. -->
    <script type="text/javascript" src="common/jquery.js"></script>
    <script type="text/javascript" src="popup.js"></script>
</head>

<body>
    <h1>Topics</h1>
    <div id="content">..:: Loading ::..</div>
</body>
</html>

popup.js

这个脚本开始制作一个$.get()到远程网页。变量的内容data可以被找寻到here

$.get("http://gaming.ngi.it/subscription.php?do=viewsubscription", function(data) {
    var TDs = $('td[id*="td_threadtitle_"]', data);
    $(document).ready(function() {
        $("#content").html("<br/>");
        $.each( TDs, function() {
            //Removes useless elements from the source
            $('img[src="images/misc/tag.png"]', this).remove();
            $('span', this).remove(); //$('span[class="smallfont"]', this).remove();
            $('div[class="smallfont"]', this).remove();
            $('img[src="images/buttons/firstnew.gif"]', this).attr('src', '/img/icons/comment.gif');
            $('a[style="font-weight:bold"]', this).removeAttr("style");
            //Modify the lenght of the strings
            if ($("a[id^='thread_title_']", this).text().length > 35) {
                $("a[id^='thread_title_']", this).text( $("a[id^='thread_title_']", this).text().substring(0, 30) + " [...]" );
            }
            //Modify the URL from relative to absolute and add the target="_newtab"
            $("a[id^='thread_']", this).attr('href', "http://gaming.ngi.it/"+ $("a[id^='thread_']", this).attr('href'));
            $("a[id^='thread_']", this).attr('target', "_newtab");
            //Send the HTML modified to the popup window
            $("#content").html($("#content").html() + $('div', this).wrap("<span></span>").parent().html() +"<br/>" );
        });
    });
});

Here经过 jquery 的所有操作后,您可以找到 HTML。

老实说,我无法理解为什么会显示这些错误,尤其是与安全相关的错误。我没有在 popup.html 中使用任何内联代码。

清单.json

{
    "name": "NGI Little Helper",
    "version": "0.8.5",
    "manifest_version": 2,
    "description": "Extension per gli Utenti del forum gaming.ngi.it",
    "options_page": "fancy-settings/source/index.html",
    "background": {
        "page": "background.html"
    },
    "icons": {
        "16": "img/logo16.png",
        "48": "img/logo48.png",
        "128": "img/logo128.png"
    },
    "content_scripts": [{
        "matches": ["*://gaming.ngi.it/*"],
        "js": ["common/jquery.js", "logo_changer/logo_change.js"],
        "run_at": "document_start"
    }],
    "browser_action": {
        "default_icon": "img/icon.png",
        "default_popup": "popup.html",
        "default_title": "Visualizza Subscriptions"
    },
    "permissions": [
        "*://gaming.ngi.it/*"
    ]
}

以下是一段 HTML 代码,在所有操作之后将呈现到弹出窗口中。一切div与此类似,只是 url 发生变化:

<div>

            <a href="http://gaming.ngi.it/showthread.php?goto=newpost&amp;t=555954" id="thread_gotonew_555954" target="_newtab"><img class="inlineimg" src="/img/icons/comment.gif" alt="Go to first new post" border="0"></a>




            <a href="http://gaming.ngi.it/showthread.php?goto=newpost&amp;t=555954" id="thread_title_555954" target="_newtab">[All Gamez] [Frozen Synapse] S [...]</a>

        </div>

如果需要我可以提供完整的源代码。


让我们从最简单的问题开始:

拒绝执行内联脚本,因为......

$('div', this)选择全部<div>a 内的元素<td>。在里面源代码您提供的,可以找到以下事件处理程序:


<div class="smallfont">
    <span style="cursor:pointer" onclick="window.open('member.php?u=47995', '_self')">K4raMong</span>
</div>  

默认情况下内容安全政策,这是禁止的。要消除该错误,只需在将属性插入文档之前删除该属性即可:

element.removeAttribute('onclick'); // in jQuery: $element.removeAttr('onclick');

为什么要加载这些图像?我没有把它们放在文档中

在 jQuery/JavaScript 操作 DOM 之前,必须先对其进行解析。在您的代码中,这项工作是隐式完成的var TDs = $(.., data)。线。该解析大约等于:

var dummy = document.createElement('div'); // Container
dummy.innerHTML = data;

听说过预加载图像吗?这是缓存图像的一个有用功能,以便它们在需要时准备就绪。这可以使用以下方法完成(new Image).src='...';。所创建的<img>元素不必插入到文档中。

就您而言,这是不需要的行为,因为这些图像是在您的扩展中查找的。这是由于您的网页使用了相对 URL,而不是绝对的。使用相对 URL 时,资源的预期位置取决于当前文档的位置。

如何修复它

Do not使用 jQuery。由于您正在编写 Chrome 扩展程序,因此无需担心跨浏览器兼容性。 jQuery 使用innerHTML解析 HTML 的技巧,但失败了,正如我之前所展示的。

JavaScript 有DOMParser对象,从 Chrome 30 开始可以按如下方式使用:

var doc = (new DOMParser).parseFromString(data, 'text/html');

您可以使用以下命令跳过从字符串到文档的手动转换responseType属性,如下图所示。

得出解决方案

如您所知,Chrome 扩展程序中可以进行跨站点请求,前提是将 URL 正确添加到permissions清单文件中的部分。我们将使用 XMLHttpRequest level 2 中引入的一个功能,即responseType属性.

// Fetching data
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://gaming.ngi.it/subscription.php?do=viewsubscription');
xhr.onload = function() {
    var doc = xhr.response;
    // Now, you can use jQuery, since the string has been parsed.
    ...
};
xhr.responseType = 'document'; // Chrome 18+
xhr.send();

您可以轻松地重写代码以使用本机 DOM 和 JavaScript 而不是 jQuery。大多数使用 jQuery 作为选择器引擎,但最常见的是,它也可以使用element.querySelectorAll。获取文档后使用var doc = xhr.response;, 请执行下列操作:

var TDs = doc.querySelectorAll('td[id*="td_threadtitle_"]');
var html = '';
[].forEach.call(TDs, function(td) {
    // etc, etc. Do your job
});

你有看到var html = '';?无论您是否使用 jQuery,这都是一个很好的做法。永远不会做element.innerHTML += ...;甚至更糟$element.html($element.html() + ...);循环中。浏览器将很难一遍又一遍地渲染它,并且您(作为用户)会注意到性能下降。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

控制台显示有关内容安全策略的错误和大量失败的 GET 请求 的相关文章

  • 具有相等宽度和高度 TD 的响应式表格

    如何创建每个单元格 TD 具有相同宽度和高度的响应式 HTML 表格 因此 当我调整浏览器窗口的大小或调整表格容器的大小时 表格将调整大小 但每个单元格将具有相同的高度和宽度 基金会不关心这个 当我用固定宽度和高度 以像素为单位 初始化 T
  • Python请求401错误但url在浏览器中打开

    我正在尝试从这个位置提取 json https www nseindia com api option chain indices symbol BANKNIFTY https www nseindia com api option cha
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • 连接运算符 + 或 ,

    var1 abc var2 xyz print literal var1 var2 literalabcxyz print literal var1 var2 literal abc xyz 除了带有 的自动空格之外 两者有什么区别 哪个通
  • 处理延迟对象数组

    自从使用 Deferred我已经遇到过这种情况几次 我有一个值列表 每个值都以某种方式生成一个延迟对象 并且我想在所有延迟对象都解析后执行回调 一个更具体的例子是这样的 var urls foo com bar com baz com qu
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put
  • 如何将域从 Godaddy 移动到 AWS Route 53

    由于 Godaddy 宕机了几个小时 我和我的客户都非常沮丧 希望将所有内容都更改为 AWS 到目前为止一切都已完成 只有域 blablabla com 丢失 我在尝试从 godaddy 迁移到 Route 53 时遇到了困难 我是否必须从
  • Python列表问题

    我在使用 python 列表时遇到问题 简化版本是 mylist1 some items in a list mylist2 mylist1 mylist1 pop i mylist insert i item print mylist1
  • '>&0' 有用途吗(重定向到标准输入)?

    在 bash 中你可以这样做 echo test gt 1 重定向到标准输出 尽管它已经到那里了 echo test gt 2 重定向到标准错误 echo test gt 0 重定向到标准输入 当我做最后一个时 我的终端仍然打印test就像
  • Firebase/Firestore 事务是否会创建内部队列?

    我想知道交易是否 https firebase google com docs firestore manage data transactions https firebase google com docs firestore mana
  • 如何从 stack.navigation 外部的组件使用 navigation.navigate

    我有一个使用 React Native 的应用程序 我正在使用 React navigation 5 2 9 我构建了一个 Stack Navigator 其中有我的屏幕 但我希望页脚组件位于外部 以便它在所有屏幕中呈现 问题是 我无法从页
  • Chrome 中的 addEventListener

    我正在关注 Lynda com 上有关新 DOM 事件模型的教程 这是我正在使用的代码 function addEventHandler oNode sEvt fFunc bCapture if typeof window event un
  • 将 pandas 数据框中的多列更改为日期时间

    我有一个 13 列和 55 000 行的数据框 我正在尝试将其中 5 行转换为日期时间 现在它们返回类型 对象 我需要转换这些数据以进行机器学习 我知道如果我这样做 data birth date pd to datetime data b
  • Spark DataFrame 不尊重架构并将所有内容视为字符串

    我面临着一个多年来一直无法克服的问题 我使用的是 Spark 1 4 和 Scala 2 10 我现在无法升级 大型分布式基础设施 我有一个包含几百列的文件 其中只有 2 列是字符串 其余都是长列 我想将此数据转换为标签 特征数据框 我已经
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1
  • Tensorflow ctc_loss_calculator:找不到有效路径

    当运行我的神经网络 双向 LSTM 进行音频识别时 我使用连接主义时间分类 CTC 但在某些时候 训练网络时我几乎每批都会收到来自 Tensorflow 的警告 W tensorflow core util ctc ctc loss cal
  • 非键属性查询

    看起来 dynamodb 的query方法必须包含分区键作为过滤器的一部分 如果不知道分区键如何进行查询 例如 您有一个具有属性的用户表userid设置为分区键 现在我们想通过电话号码查找用户 是否可以在没有分区键的情况下执行查询 使用sc
  • 如何获取 EC2 实例的 CloudWatch 指标数据

    我想获取我的 EC2 实例的 Cloudmetrics 数据 以便我可以使用这些数据绘制图表并将其显示在我的 Android 设备上 我怎么做 有相同的示例程序或教程吗 提前致谢 这就是我正在做的 private static void f
  • 如何限制mySQL中的搜索和替换字符串

    我用它来搜索和替换 mySQL 中的字符串 UPDATE products SET prodname REPLACE prodname S S 这些产品包含诸如 TYLENOL TABS 100 S 之类的字符串 我想将其转换为 TYLEN
  • 是否可以使用具有余弦相似度的 KDTree?

    看来我不能使用这个相似度度量sklearn例如 KDTree 但我需要 因为我正在使用测量单词向量相似度 对于这种情况 快速鲁棒定制算法是什么 我知道关于Local Sensitivity Hashing 但它应该经过大量调整和测试才能找到

随机推荐

  • ggplot 中 Hmisc 标记对象的问题

    我收到消息 错误 没有适用于 round any 的方法应用于对象 标记 类 当我尝试使用绘制图表时ggplot2和 R 我已经在我的数据框中标记了我的变量Hmisc label我认为这就是问题所在 我该如何解决这个问题 我的标签如下所示
  • 为什么css高度100%不适用于普通div?

    这是我的简单代码 div div CSS高度100 不适用于DIV 我知道一些其他的 css 代码来获取这个 但为什么这段代码不起作用 如何在没有任何脚本的情况下处理高度 100 和宽度 100 For 要工作 您需要设置高度parent
  • 使用 travis-ci 和 wxpython 测试

    我正在尝试添加一些 wxPython 测试以与 travis ci 一起使用 但我不知道如何在构建环境中安装 wxPython 我使用brew在我的计算机上安装了wxPython 但是我无法让brew与travis ci一起使用 在 tra
  • 如何使用 PHP-Parser 获取全局变量名称并更改它

    我想用PHP解析器库来获取全局方法 POST GET REQUEST 获取 PHP 中的值 我在用着PHP解析器我想检查节点名称是否等于 POST GET REQUEST 我还是 PHP Parser 的初学者 不知道如何获取这些全局变量
  • 尽管值在 getPreviewFpsRange 的范围内,但 setPreviewFpsRange 不起作用

    这个简单的代码 Camera Parameters params currentCamera getParameters params setPreviewFpsRange 10000 15000 currentCamera setPara
  • JSPDF - 如何将具有不同页面尺寸(高度和宽度)的多个图像导出到单个 pdf 文件

    我有多个不同尺寸 高度和宽度 的图像 需要使用 jspdf 将其转换为 PDF 但使用时遇到问题addPage 函数来做到这一点 是否可以将不同页面大小的图像导出到单个 pdf 中 我实际上可以使用以下命令添加具有不同图像尺寸的多个页面ad
  • JPanel 上的 MouseEvent - 坐标错误

    我用Java编写了以下微型画笔程序 import java awt BorderLayout import java awt Color import java awt Container import java awt Graphics
  • Clojure 的 :require 和 Instaparse

    我正在尝试使用即时解析我的 Clojure 项目的 lib 我在项目依赖项中使用 leiningen 2 0 和 clojure 1 5 1 我将 instaparse 添加到我的项目依赖项中 如下所示 defproject bachelo
  • 实现 DHCP 客户端

    在使用 C 的 UNIX 上 我的客户端正在以超级用户模式侦听端口 68 发送 DHCP 发现消息后 当我尝试接收时 它会阻塞在 recvfrom 中 这意味着没有收到消息 或者系统是否有一个进程 DHCP 客户端 在同一端口 68 上监听
  • 如何在新项目中重用 Eclipse 启动文件

    我刚刚在 eclipse 中检查了一个 svn 项目作为 java 项目 其中有几个运行启动文件我想重用 但不知道如何指向 运行 来查看这些启动文件或使用它 有什么建议吗 谢谢 通常这些会被项目自动选取并放置在运行菜单中 如果不是 请右键单
  • Google 表单中的 FILE_UPLOAD 项目类型

    谷歌最近在其表单中添加了文件上传功能 但是 我无法找到任何有关如何在谷歌脚本中使用它的文档 如果我在 google 上查看 item types API 它没有列出 https developers google com apps scri
  • iOS 音频操作 - 向后播放本地 .caf 文件

    我想要加载本地 caf 音频文件并反转音频 向后播放 我发现我基本上需要从帖子中翻转一系列缓冲区数据this 但是 我不确定如何从给定的音频文件访问此缓冲区数据 我有一些使用 AVaudioPlayer 和 ObjectAL 一个 obj
  • 对空值使用空检查运算符

    我是新来的Flutter 当我运行我的简单扑动应用程序时 出现此错误 我不明白为什么会发生这个错误 Error Null check operator used on a null value 我在 main dart 中的代码 impor
  • 如何在ASP.NET Core 3.1 MVC中进行RequiredIf客户端和服务器端验证?

    我必须在 ASP NET Core 3 1 中进行客户端和服务器端验证 我浏览了很多博客 但对 ASP NET Core MVC 没有足够的了解 我必须进行必需的验证 什么时候BusinessType is Business the VAT
  • 在多维数组中搜索值并返回新数组

    过去几个小时一直在为此苦苦挣扎 尝试为数组构建一个搜索函数 然后输出一个包含所有具有关键字的数组的新函数 这是我正在使用的函数 不确定这是否朝着正确的方向前进 它返回数组中的数组 这不是我想要的 function search array
  • 在本地主机中运行 laravel 项目

    我已经通过composer create project laravel laravel prefer dist安装了laravel 之后运行 php artisanserve 命令到 laravel 项目目录并得到这个结果 Laravel
  • 如何计算读入此列表的文件数量?

    我有一堆 csv 文件 我正在将它们读入如下列表中 f lt list files pattern 201 d 5 csv 有什么方法可以计算我正在读入的文件数量吗 Yes length f 会给你文件名的数量f
  • Jetty 上的 JSF2 随机给出“zip 文件已关闭”,但在从 Maven jetty 插件运行时有效 (jetty:run)

    我的 JSF Web 应用程序在访问文件 如图像 css js 时随机出现错误 zip 文件已关闭 它部署在 Jetty 7 上 看起来其中一些文件未加载 页面上缺少一些图像 java lang IllegalStateException
  • 提高此场景性能的方法

    我有一张地图 其中填充了大量数据 约300 000条记录 并如下迭代 for Map Entry
  • 控制台显示有关内容安全策略的错误和大量失败的 GET 请求

    我实际上正在开发我的第一个 Chrome 扩展程序即使运行顺利我收到了很多错误get 我用来检索一些数据的函数和关于代码安全性的恼人错误 Here s a screenshot of the console log 下面是涉及到的代码 弹出