Chrome扩展程序内容脚本中的Polymer元素

乐观主义者

我创建了一个自定义的Polymer元素,并尝试在Chrome扩展程序中使用它。但是,我遇到了以下问题。

我无法从内容脚本访问元素的API。这就是我的意思。

my-element的模板

<link rel="import" href="../polymer/polymer.html">
<dom-module id="my-element">
<template>
... some html...
</template>
<script src="js/my-element.js"></script>
</dom-module>

在my-element.js中

Polymer({
  is: 'my-element',
  init: function () {
    console.log('init');
  }
});

在content.js中

var link = document.createElement('link');
link.setAttribute('rel', 'import');
link.setAttribute('href', chrome.extension.getURL('my-element.html'));
link.onload = function() {
  var elem = document.createElement('my-element');
  document.body.appendChild(elem);
  elem.init(); // Error: undefined is not a function
};
document.body.appendChild(link);

有趣的是,我可以看到它my-element在页面上正确呈现,包括阴影dom和其他所有内容。而且,如果我document.querySelector('my-element').init()在宿主网页的控制台中运行,则该命令将正确执行。但是,在内容脚本中执行相同的代码会产生错误。

我试图将Polymer本身包含为内容脚本。我遇到了registerElement问题,但是由于这个问题,我解决了在这种情况下,我已经window.Polymer在中定义了content.jsMy-element的API可以完全访问,但是当我将它添加到宿主网页的DOM时,它的shadow dom无法呈现。

菲利普·赖查特(Philipp Reichart)

您正在访问内容脚本的沙箱:

内容脚本在称为隔离世界的特殊环境中执行。他们有权访问所注入页面的DOM,但不能访问该页面创建的任何JavaScript变量或函数。看起来每个内容脚本都好像在其上运行的页面上没有其他JavaScript在执行。反之亦然:在页面上运行的JavaScript无法调用任何函数或访问由内容脚本定义的任何变量。

来自https://developer.chrome.com/extensions/content_scripts#execution-environment

Polymer组件的脚本在宿主页中运行,因此内容脚本不可见。

您可以将新的脚本标签注入到宿主页面中,并从扩展名中的.js文件中获取它,例如

var script = document.createElement('<script>');
script.src = chrome.extension.getURL('something.js');
document.appendChild(script);

这将something.js在宿主页面的上下文中运行,从而授予它对宿主页面中所有其他脚本(包括您的Polymer组件)的访问权限,但也使其对内容脚本不可见。请特别注意在主机页面中注入脚本安全隐患

如果您不能/不愿意将所有扩展逻辑推入该注入的脚本中,例如,因为您需要访问chrome.*API或宿主页面和内容脚本之间进行某种其他形式的通信,请查看消息发布

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Chrome扩展程序中停止内容脚本

来自分类Dev

Chrome扩展程序:内容脚本未找到dom元素

来自分类Dev

如何自动测试Chrome扩展程序中的内容脚本?

来自分类Dev

从Chrome扩展程序中的内容脚本传递消息

来自分类Dev

从Chrome扩展程序中的内容脚本传递消息

来自分类Dev

Chrome扩展程序不显示内容脚本中的数据

来自分类Dev

如何取消Chrome扩展程序内容脚本中的事件绑定?

来自分类Dev

Chrome扩展程序内容脚本访问扩展程序框架

来自分类Dev

Chrome扩展程序中内容脚本和弹出脚本之间的消息传递

来自分类Dev

Chrome扩展程序引用/调用内容脚本中的其他脚本功能

来自分类Dev

在内容脚本中定义但无法在弹出窗口中访问的脚本(Chrome扩展程序)

来自分类Dev

在Chrome扩展程序中将远程脚本作为内容脚本

来自分类Dev

Chrome扩展程序后台脚本中的AngularJS

来自分类Dev

Chrome扩展程序中的Google Apps脚本?

来自分类Dev

为什么我的Chrome扩展程序无法为某些网站的内容脚本在<body>中附加HTML?

来自分类Dev

如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

来自分类Dev

Chrome扩展程序将Background.js中的消息发送到内容脚本

来自分类Dev

Chrome扩展程序中内容脚本和背景页面之间消息传递的安全性

来自分类Dev

是否可以在查看源页面上的Chrome扩展程序中运行内容脚本?

来自分类Dev

在chrome扩展程序中,如何使用内容脚本注入Vue页面

来自分类Dev

Chrome扩展程序(内容脚本和匹配模式)-仅匹配URL中的数字

来自分类Dev

如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

来自分类Dev

如何通过内容脚本在Chrome扩展程序中设置标志文本?

来自分类Dev

无法在Chrome扩展程序中从后台页面向内容脚本发送消息

来自分类Dev

Chrome扩展程序中内容脚本和背景页面之间消息传递的安全性

来自分类Dev

无法通过Chrome扩展程序中的内容脚本使onclick在注入的按钮上起作用

来自分类Dev

InnerText在内容脚本Chrome扩展程序中返回未定义的

来自分类Dev

Chrome扩展程序内容脚本:click()和异步结果

来自分类Dev

Chrome扩展程序内容脚本未触发代码

Related 相关文章

  1. 1

    在Chrome扩展程序中停止内容脚本

  2. 2

    Chrome扩展程序:内容脚本未找到dom元素

  3. 3

    如何自动测试Chrome扩展程序中的内容脚本?

  4. 4

    从Chrome扩展程序中的内容脚本传递消息

  5. 5

    从Chrome扩展程序中的内容脚本传递消息

  6. 6

    Chrome扩展程序不显示内容脚本中的数据

  7. 7

    如何取消Chrome扩展程序内容脚本中的事件绑定?

  8. 8

    Chrome扩展程序内容脚本访问扩展程序框架

  9. 9

    Chrome扩展程序中内容脚本和弹出脚本之间的消息传递

  10. 10

    Chrome扩展程序引用/调用内容脚本中的其他脚本功能

  11. 11

    在内容脚本中定义但无法在弹出窗口中访问的脚本(Chrome扩展程序)

  12. 12

    在Chrome扩展程序中将远程脚本作为内容脚本

  13. 13

    Chrome扩展程序后台脚本中的AngularJS

  14. 14

    Chrome扩展程序中的Google Apps脚本?

  15. 15

    为什么我的Chrome扩展程序无法为某些网站的内容脚本在<body>中附加HTML?

  16. 16

    如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

  17. 17

    Chrome扩展程序将Background.js中的消息发送到内容脚本

  18. 18

    Chrome扩展程序中内容脚本和背景页面之间消息传递的安全性

  19. 19

    是否可以在查看源页面上的Chrome扩展程序中运行内容脚本?

  20. 20

    在chrome扩展程序中,如何使用内容脚本注入Vue页面

  21. 21

    Chrome扩展程序(内容脚本和匹配模式)-仅匹配URL中的数字

  22. 22

    如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

  23. 23

    如何通过内容脚本在Chrome扩展程序中设置标志文本?

  24. 24

    无法在Chrome扩展程序中从后台页面向内容脚本发送消息

  25. 25

    Chrome扩展程序中内容脚本和背景页面之间消息传递的安全性

  26. 26

    无法通过Chrome扩展程序中的内容脚本使onclick在注入的按钮上起作用

  27. 27

    InnerText在内容脚本Chrome扩展程序中返回未定义的

  28. 28

    Chrome扩展程序内容脚本:click()和异步结果

  29. 29

    Chrome扩展程序内容脚本未触发代码

热门标签

归档