1

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

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

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

4

5 回答 5

0

我会把它作为一个扩展来做,因为你想针对 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 获取所有选项卡的当前选项卡 URL:

// 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
        );
    }
});

选项卡 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

于 2013-06-15T19:21:50.063 回答
0

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

注意:它不一定是applescript;您可以通过可可访问脚本桥。

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

于 2013-06-19T14:26:53.697 回答
0

就像一个快速说明:

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

这是Safari 和 Chrome 的 AppleScript 命令的要点。Firefox 似乎不支持 AE。

于 2014-10-08T22:45:43.220 回答
-1

很明显,这就是我在谷歌上遇到的。

chrome.tabs。getSelected (null, function (tab) { alert (tab.url); }) ;

于 2013-06-15T18:52:08.397 回答
-2

在纯javascript中,我们可以使用

alert(document.URL);

alert(window.location.href)

获取当前网址的函数

于 2013-06-19T12:46:42.527 回答