如何将数据从网页传递到chrome ext?

时间:2012-12-03 20:02:39

标签: javascript google-app-engine google-chrome-extension

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

我觉得这很好

  1. 我们尝试从$ .get获取用户('APP / get / user'{auth_token:''}, 回调)[在我的Chrome扩展程序中]
  2. 如果我们收到'not_auth'回复,请在新标签中回调打开auth_page [在我的Chrome扩展程序中]
  3. 我们登录并重定向到页面,其中生成* auth_token * [在我的WEB-APP-PAGE]
  4. 将* auth_token *传递给我的Chrome扩展程序?????怎么样?通过JS? [在我的WEB-APP-PAGE]
  5. 如何实现第4段?谢谢

3 个答案:

答案 0 :(得分:1)

对apsillers有好处

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

contentscript.js

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

<强> background.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;
  });

答案 1 :(得分:0)

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

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

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

content script(content.js)中获取auth_token,

console.log(localStorage["auth_token"])

答案 2 :(得分:0)

content script communication上的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);

在事件监听器内部,如有必要,您可以使用message passingauth_token传递到您的背景页。

修改

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

...
"content_scripts": [
  {
    "matches": ["http://www.mypagedomain.com/*"],
    "js": ["contentscript.js"],
    "run_at": "document_start"
  }
],
...