代码之家  ›  专栏  ›  技术社区  ›  hretic

检查是否安装了扩展,如果用户删除了扩展,请关闭选项卡

  •  2
  • hretic  · 技术社区  · 7 年前

    a.com ,用户访问我的网站,我与另一个网站上的人交谈 b.com b.com/somelink 并将用户重定向到该链接。

    问题是,这个地址 包含一些我想对访客隐藏的私人信息。。。因为我不能控制那个网站,所以我不能控制它。

    下面是我的简单扩展:

    清单.json

    {
      "name": "extname",
      "version": "1.0",
      "description": "extnameExtension!",
      "manifest_version": 2,
      "permissions": [
        "tabs", "http://*/*", "https://*/*" ,  "webNavigation"
      ] ,
    
      "content_scripts": [
        {
    
          "matches": ["*://b.com/*"],
          "js": ["contentscript.js"],
          "run_at": "document_start"
        }
      ]
    
    }
    

    内容脚本.js

    function fireOnReady() {
        document.getElementById('personal-info').innerHTML = 'some dummy data';
    }
    if (document.readyState === 'complete') {
        fireOnReady();
    } else {
        document.addEventListener("DOMContentLoaded", fireOnReady);
    }
    

    1-用户可以禁用扩展并刷新页面 查看我的个人信息。。。。所以我的解决方案是关闭浏览器选项卡打开 如果他们拿走我的分机。。。有什么办法吗(此链接仅在他们从“我的网站”重定向到b.com时可用,这样他们就不能在新选项卡/浏览器中复制/粘贴链接)

    **请不要谈论我解释的场景或其他解决方案或…我知道这可能听起来很奇怪,但这不是针对公共用户,而是私人特殊群体谁将安装扩展,如果他们必须,我有兴趣知道如何做到这一点与代码和扩展,即使我找到另一个解决方案**

    4 回复  |  直到 7 年前
        1
  •  5
  •   Community Mohan Dere    5 年前

    您的建议是将用户重定向到包含私有信息的页面,然后当扩展检测到该页面已加载时,从DOM中删除该信息。不管你问的关于延期的两个问题是什么,我都不会使用你提出的方法,因为:

    1. 私人信息是 仍然 . 作为 iPirat 将显示原始HTML

    2. 扩展失败可能会暴露敏感数据。 你说你不能控制显示私人信息的网站,这意味着你不能控制这个网站 personal-info 包含您的私人信息的元素的ID。如果那边的设计师决定把ID改成 personal-user-info

      这与代码中的bug无关。你在某处输入了一个错误,你的扩展没有运行,敏感信息对用户是可见的。

    我会重新考虑你的整个方法。一种常用的方法是让前端代码从第三方站点获取所需的信息,以确保用户永远不会掌握私有信息( b.com )通过站点上的服务器( a.com ). 您的服务器可以从 b、 通信 只包括什么 必须 传递给你的用户。

        2
  •  1
  •   Lars Johnsen    7 年前

    a.com 可以嵌入 b.com/somelink 作为一个iframe,但是不要显示iframe,除非它从扩展接收到一个信号。

    a、 通信 Javascript代码:

    iframe = document.createElement('iframe');
    iframe.src = 'b.com/somelink';
    setInterval(() => {
        if (!document.body.classList.contains('extension-token')) window.close();
        else if (!document.body.contains(iframe)) document.body.append(iframe);
        document.body.classList.remove('extension-token');
    }, 10000);
    

    a、 通信 内容脚本:

    setInterval(() => {
       document.body.classList.add('extension-token');
    }, 5000);
    

    这当然不是一个安全的解决方案。

        3
  •  0
  •   Pati    7 年前

    正如IPirat和Luis所说,浏览器扩展在您的情况下不是一种安全的方式。用户可以禁用它,用户可以在调试程序的“网络”选项卡中看到原始html,用户可以在没有扩展名的地方运行另一个浏览器来修改页面。你只有两个前进的选择:

    1. 您必须创建服务器端脚本,该脚本将加载b.com/somelink,修改它并向用户发送没有您的私有数据的页面。

    2. 您可以创建自己的浏览器。例如,使用visualstudio为windows创建带有C#或VBA的webbrowser非常容易。您可以共享b.com/somelinkmodified,它将在您的浏览器中转换为b.com/somelink,任何其他浏览器都无法访问它。因此,用户必须安装浏览器才能看到生成的页面。您的浏览器将打开此链接,将加载页面,然后修改并只显示所需的信息

        4
  •  -2
  •   Ying Li    7 年前

    你可以简单地要求用户在你的网站上安装你的Chrome应用程序,然后在Chrome应用程序上执行代码(获取链接,发送重定向)。你可以让Chrome应用程序本质上成为一个前端(你甚至可以复制HTML),并在那里完成所有的逻辑。你将有完全的信息控制,因为你的Chrome应用程序是一个执行重定向。事实上,你的Chrome应用程序可以在没有地址栏的情况下启动windows。您甚至可以在内部进行http调用并输出响应html;通过这种方式,您可以完成在URL链接中隐藏参数的操作(我假设您担心个人信息会在这里)。

    推荐文章