【问题标题】:Detect url the user is viewing in chrome/firefox/safari检测用户在 chrome/firefox/safari 中查看的 url
【发布时间】:2014-10-09 06:45:43
【问题描述】:

如何检测我通过 cocoa(桌面应用程序)在 chrome/safari/firefox 中浏览的 url?

作为一个侧面但相关的说明,在开发桌面应用程序时是否有任何安全限制,用户会收到警告并询问他们是否要允许?例如如果应用访问他们的联系信息等。

寻找基于可可的解决方案,而不是 javascript。

【问题讨论】:

    标签: macos cocoa security


    【解决方案1】:

    我会将此作为扩展程序,并且因为您希望以 Chrome、Safari 和 Firefox 为目标,所以我会使用 Crossrider 之类的跨浏览器扩展程序框架。

    所以去 crossrider.com,设置一个帐户并创建一个新的扩展程序。然后打开 background.js 文件并粘贴如下代码:

    appAPI.ready(function($) {
        appAPI.message.addListener({channel: "notifyPageUrl"}, function(msg) {
            //Do something, like send an xhr post somewhere 
                // notifying you of the pageUrl that the user visited.
            // The url is contained within msg.pageUrl      
        });
    
        var opts = { listen: true}; 
        // Note: When defining the callback function, the first parameter is an object that
        //       contains the page URL, and the second parameter contains the data passed
        //       to the context of the callback function.
        appAPI.webRequest.onBeforeNavigate.addListener(function(details, opaqueData) {
            // Where:
            //   * details.pageUrl is the URL of the tab requesting the page
            //   * opaqueData is the data passed to the context of the callback function
            if(opaqueData.listen){
                appAPI.message.toBackground({
                    msg: details.pageUrl
                }, {channel: "notifyPageUrl"});
            }
        }, opts ); // opts is the opaque parameter that is passed to the callback function
    });
    

    然后安装扩展!在上面的示例中,没有对检测到的用户正在访问的 pageUrl 进行任何操作,但是您可以在这里做任何您想做的事情 - 您可以向用户发送消息,您可以使用 cancel 或 redirectTo 返回参数来限制访问,您可以使用 crossrider appAPI.db API 在本地记录它,或者您可以将通知发送到其他地方,跨域,直接从后台使用 XHR 请求发送到任何您喜欢的地方。

    希望有帮助!

    要回答有关桌面端安全问题的问题,请注意桌面应用程序将拥有运行它们的用户的权限。因此,如果您正在考虑提供一个您的用户将在本地运行的桌面应用程序,请说一些将通过使用诸如 windows 上的 winpcap 或 *nix 品种上的 libpcap 之类的东西进入网络流来检测他们访问的 url,然后请注意这一点- 并且 libpcap 和朋友们必须有权访问可以由相关用户首先置于混杂模式的网卡。

    pcap / 已安装的桌面应用程序解决方案非常具有侵入性 - 大多数人不希望您真正监听所有内容,并且实际上可能违反某些安全策略,具体取决于您的用户工作地点 - 他们的网络管理员可能不喜欢您“嗅探” ,无论这是否是实际目的。安全人员可以在这类话题上发表真正令人毛骨悚然的言论。

    如果我对目标的理解正确的话,通过 Crossrider 进行的扩展可能是实现目标的最简单且干扰最小的方式。

    最后一点,您可以使用 Crossrider 的选项卡 API 获取所有选项卡的当前选项卡网址:

    // retrieves the array of tabs
    appAPI.tabs.getAllTabs(function(allTabInfo) {
        // Display the array
        for (var i=0; i<allTabInfo.length; i++) {
            console.log(
                'tabId: ' + allTabInfo[i].tabId +
                ' tabUrl: ' + allTabInfo[i].tabUrl
            );
        }
    });
    

    tab API,参考: http://docs.crossrider.com/#!/api/appAPI.tabs

    对于后台导航 API: http://docs.crossrider.com/#!/api/appAPI.webRequest.onBeforeNavigate

    对于消息传递: http://docs.crossrider.com/#!/api/appAPI.message

    对于 appAPI.db 的东西: http://docs.crossrider.com/#!/api/appAPI.db

    【讨论】:

    • 这必须通过 cocoa 来完成,抱歉,不是 javascript 解决方案。
    • 啊,我明白了-感谢您的澄清,希望您找到一个好的解决方案!
    【解决方案2】:

    您查看过Scripting Bridge 吗?你可以有一个应用程序启动,比如说,一个 Applescript,它会验证是否打开了任何众所周知的浏览器,并询问他们正在查看哪些文档 (URL)。

    注意:它不一定是applescript;您可以通过 cocoa 访问 Scripting Bridge。

    但是,它需要浏览器支持。我知道 Safari 支持它,但如果其他人支持它,请忽略。

    【讨论】:

      【解决方案3】:

      作为一个简短的说明:

      有很多方法可以通过 AppleScript 来实现,您可以轻松地将这段代码包装到 NSAppleScript 调用中。

      这里是gist,其中包含适用于 Safari 和 Chrome 的 AppleScript 命令。 Firefox 似乎不支持 AE。

      【讨论】:

        【解决方案4】:

        显然这是我在 google 上看到的。

        chrome.tabs。 被选中 (无效的, 功能 (标签) { 警报 (tab.url); }) ;

        【讨论】:

        • 可能重复
          stackoverflow.com/questions/1979583/how-can-i-get-the-url-for-a-google-chrome-tab
        【解决方案5】:

        我们可以在纯javascript中使用

        alert(document.URL);
        
        alert(window.location.href)
        

        获取当前网址的函数

        【讨论】:

          猜你喜欢
          • 2012-01-05
          • 2012-04-08
          • 2022-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-20
          相关资源
          最近更新 更多