【问题标题】:Get current time from internet in google chrome extension在谷歌浏览器扩展中从互联网获取当前时间
【发布时间】:2016-04-19 10:19:15
【问题描述】:

如何从我正在编写的 google chrome 扩展内容脚本中获取 Internet 上的当前时间(日期)?请不要使用JQuery!而且我从来没有处理过http请求(或任何服务器请求),所以请提供详细的代码! 谢谢!

【问题讨论】:

  • 对 JS 的一点了解和互联网上的简单搜索导致我这样做:JavaScript Date Methods
  • 这需要本地计算机的时间。我想要来自互联网的实时数据。
  • 我明白了,你是对的,也许你可以使用 API 什么的?
  • 我敢打赌我可以,但我什么也做不了。如果有人能给我一段有效的代码,我将不胜感激。
  • 如果你不想处理http请求,你如何获得上网时间?

标签: javascript http google-chrome-extension httprequest


【解决方案1】:

更新

考虑到从当前网页发送请求时存在SOP 限制,我建议您在后台页面发送ajax 调用,然后使用Message Passing 将数据传输到内容脚本。您可以查看Cross-Origin XMLHttpRequest了解更多详情。

manifest.json

{
    "name": "36716999",
    "version": "0.1",
    "manifest_version": 2,
    "content_scripts": [
        {
            "js": [
                "content.js"
            ],
            "matches": [
                "<all_urls>"
            ]
        }
    ],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "permissions": [
        "http://www.timeapi.org/utc/now"
    ]
}

content.js

chrome.runtime.sendMessage({ query: "currentTime" }, function (response) {
    console.log(response.currentTime);
});

background.js

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    if (request.query === "currentTime") {
        var xhr = new XMLHttpRequest();
        xhr.onload = function () {
            sendResponse({currentTime: xhr.responseText});
        };
        xhr.open("GET", "http://www.timeapi.org/utc/now");
        xhr.send();

        return true;
    }
});

上一页

你可以对http://www.timeapi.org/utc/now进行ajax调用以获得上网时间,考虑到你不想处理jQuery,这很容易进行ajax调用,你可以使用本机实现,XMLHttpRequest

manifest.json

{
    "name": "36715494",
    "version": "0.1",
    "manifest_version": 2,
    "content_scripts": [
        {
            "js": [
                "content.js"
             ],
             "matches": [
                 "<all_urls>"
             ]
        }
    ],
    "permissions": [
         "https://www.timeapi.org/utc/now",
         "http://www.timeapi.org/utc/now"
    ]
}

content.js

var xhr = new XMLHttpRequest();
xhr.onload = function() {
    console.log(xhr.responseText);
};

xhr.open("GET","https://www.timeapi.org/utc/now");
xhr.send();

【讨论】:

  • @Xan,显然我又过时了。感谢您的关注,我会在阅读相关规范后更新。
  • 我这么说的部分原因是开玩笑,您的代码本质上没有任何问题 - 但使用load 事件看起来更清晰。
  • @Xan,是的,我知道你的意思。我简直不敢相信在你评论之前我不知道XMLHttpRequestonload 事件..
  • 只是一个小问题 - 起初它不起作用。我检查了 chrome 的控制台,它说它阻止了 timeapi.org,因为“您的连接不是私有的”。它让我“无论如何都可以继续访问该站点”,从那时起它就起作用了。但我真的不希望我的用户必须处理该错误。在权限方面,我现在拥有“”,所以我想我已经知道了。有什么建议?也许其他时间服务器?
  • @Nekoshet,我已经更新了我的答案,简单来说,从网页发送 http 请求受到同源策略的限制,我不确定 timeapi 是否有 https api,这可能影响您在 https 页面中进行 ajax 调用。一个推荐的方法是在后台页面发送ajax调用,然后使用消息传递将数据传输到内容脚本,我在帖子中包含了示例代码和参考链接,试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2013-01-25
  • 2011-10-15
  • 2015-04-17
相关资源
最近更新 更多