2

我尝试将 *auth_token* 传递给我的 Chrome 扩展,以便在 GET 请求中进一步使用它。

我认为如果

  1. 我们尝试从 $.get('APP/get/user' {auth_token:''}, callback) [在我的 Chrome 扩展中] 获取用户
  2. 如果我们得到“not_auth”响应,回调 open auth_page in new tab [in my Chrome extension]
  3. 我们登录并重定向到生成 *auth_token* [in my WEB-APP-PAGE] 的页面
  4. 将 *auth_token* 传递给我的 Chrome 扩展 ????? 如何?通过 JS?[在我的 WEB-APP-PAGE]

如何实现第 4 段?谢谢你

4

3 回答 3

1

对apsillers好

是的,最后,我明白了!在我的 contentscript.js(在我的令牌页面中加载)中获取令牌并将其发送到后台

内容脚本.js

$(function(){
  //get token from page
  var token = $.getUrlVar('token');
  if (typeof token != 'undefined') {
    chrome.extension.sendMessage({token: token});
  }
});

背景.js

/*button handler*/
function main_click() {
  alert(localStorage['auth_token']);
}
chrome.browserAction.onClicked.addListener(main_click);


/*listener*/
chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.token)
      localStorage['auth_token'] = request.token;
  });
于 2012-12-04T20:55:54.623 回答
0

我认为localStorage页面可以充当页面和扩展之间的桥梁。

在创建auth_token的第 3 阶段,将其转储到localStorage,

<script type="text/javascript">
 ...
 var auth_token = "sfafsafasfsaf";
 localStorage["auth_token"] = auth_token;
 ...
</script>

并获取内容脚本(content.js)中的 auth_token ,

console.log(localStorage["auth_token"])
于 2012-12-03T20:57:02.357 回答
0

关于内容脚本通信的 Chrome 文档建议window.postMessage在发送代码(此处为网页)和window.addEventListener("message", ...)侦听代码(此处为 Chrome 扩展程序的内容脚本,注入页面)中使用。从技术上讲,任何类型的自定义 DOM 事件也可以做到这一点,但postMessage/message已经有内置支持。

您应该能够几乎逐字逐句地从代码中提取示例代码:

原生网页:

// right after we get auth_token saved to a variable...
window.postMessage({ auth_token: auth_token }, "http://www.mypagedomain.com");

(确保http://www.mypagedomain.com更改为您的实际协议/域。)

contentscript.js(在 Chrome 扩展中,监听)

window.addEventListener("message", function(event) {
    // We only accept messages from ourselves
    if (event.source != window) {
      return;
    }

    console.log("auth_token received: " + event.data.auth_token);
}, false);

如有必要,您可以从事件侦听器内部使用消息传递将其传递auth_token到您的后台页面。

编辑:

你的清单应该包括这样的东西(注意使用run_at下面的在页面加载之前注入脚本):

...
"content_scripts": [
  {
    "matches": ["http://www.mypagedomain.com/*"],
    "js": ["contentscript.js"],
    "run_at": "document_start"
  }
],
...
于 2012-12-03T21:17:36.620 回答