【问题标题】:Chrome Extension: Can it be done: Request to local rest serviceChrome扩展:可以做到吗:请求本地休息服务
【发布时间】:2015-10-27 07:50:25
【问题描述】:

我需要一个解决方案来解决我在 Google Chrome 中执行的重复性任务。

我偶尔会遇到 IP 地址,我需要对其进行地理定位。

在我的系统上,我已经有一个 REST 服务,如果我调用了某个 url:

http://localhost:8080/json/8.8.8.8

我收到带有 GEO 数据的 JSON 响应。

我想创建一个 chrome 扩展,它会在选择时触发 georest 调用,甚至将鼠标悬停在 IPv4 字符串上。

这样的扩展可能吗?会不会被跨域请求保护屏蔽?

【问题讨论】:

    标签: javascript rest google-chrome ip


    【解决方案1】:

    您可以做的是作为 chrome、内容脚本、消息传递和设置适当权限的扩展。

    Content scripts 将在选定的(或所有)页面上运行,并且可以对页面做任何你想做的事情。他们只是从页面的 JavaScript 环境中沙箱化。您可以开发一个悬停动作,识别 IP 地址和 send the informationbackground page 可以处理它(在环境中,特别是在内容脚本上下文中不可用的扩展程序的权限)。

    在后台页面中,您可以使用XMLHttpRequestFetch 函数发出请求。处理完数据后,您可以通过消息传递将结果返回到页面,或者做任何您想做的事情。

    manifest file 中,您可以设置要发送信息的特定URL 或<all_urls> 以获得向任何地方发送请求的权限。

    ...
    "permissions": [
      "http://*.google.com/"
    ],
    ...
    

    那么您的请求将不受 CORS 和相同域策略的约束。

    【讨论】:

      【解决方案2】:

      您可以直接从 Chrome 的地址栏运行以下 scriptlet:

      javascript:var xhr = new XMLHttpRequest;xhr.open('GET', 'http://localhost:8080/json/'+window.getSelection().toString(), true);xhr.onload = function (e) {alert(xhr.responseText)};xhr.send();
      

      (请注意,从此处复制时,您需要在地址栏上的文本前添加“javascript:”,因为 Chrome 会在粘贴时对其进行修剪)。

      将此添加为新页面书签(将其命名为“IP Geo Data”)并将其放在书签栏上。或者,只需键入其名称并从 ombibox 自动完成中选择它。您需要选择您想要数据的 IP。

      您对跨域保护是正确的,但由于您在 localhost:8080/json 上控制服务,因此只需在向该路径发出的请求中添加以下标头即可:

      Access-Control-Allow-Credentials: true
      
      Access-Control-Allow-Headers: Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多