Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 铬扩展内容脚本中的聚合物元素_Javascript_Google Chrome Extension_Polymer - Fatal编程技术网

Javascript 铬扩展内容脚本中的聚合物元素

Javascript 铬扩展内容脚本中的聚合物元素,javascript,google-chrome-extension,polymer,Javascript,Google Chrome Extension,Polymer,我创建了一个自定义聚合元素,并尝试在我的Chrome扩展中使用它。但是,我遇到了以下问题 我无法从内容脚本访问元素的API。我的意思是 我的元素的模板 <link rel="import" href="../polymer/polymer.html"> <dom-module id="my-element"> <template> ... some html... </template> <script src="js/my-element.

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

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

我的元素的模板

<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>
在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);
有趣的是,我可以看到
我的元素
在页面上得到了正确的渲染,其中包含了所有的阴影dom和其他内容。如果我在宿主网页的控制台中运行
document.querySelector('my-element').init()
,则执行时不会出错。但是,在内容脚本中执行相同的代码会产生错误


我尝试将聚合物本身作为内容脚本。我遇到了
registerement
问题,但多亏了这个问题,我才解决了这个问题。在本例中,我在我的
content.js
中定义了
window.Polymer
。“我的元素”的API变得完全可访问,但现在当我将其附加到宿主网页的dom中时,它的影子dom没有呈现出来。

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

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但是不允许使用页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行。反之亦然: 页面上运行的JavaScript无法调用任何函数或访问任何 由内容脚本定义的变量

聚合组件的脚本在主机页中运行,因此内容脚本不可见

您可以将一个新的脚本标记插入到主机页中,并从扩展名中的.js文件中获取它,例如

var script = document.createElement('<script>');
script.src = chrome.extension.getURL('something.js');
document.appendChild(script);
var script=document.createElement(“”);
script.src=chrome.extension.getURL('something.js');
文件。追加子文件(脚本);
这将在主机页的上下文中运行
something.js
,授予它对主机页中所有其他脚本(包括您的聚合组件)的访问权限,但也使其对内容脚本不可见。请特别注意在主机页中注入脚本的步骤


如果您不能够/不愿意将所有扩展逻辑推入该注入脚本,例如,因为您需要访问
chrome.*
api或主机页和内容脚本之间的其他通信,请查看。

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

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但是不允许使用页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行。反之亦然: 页面上运行的JavaScript无法调用任何函数或访问任何 由内容脚本定义的变量

聚合组件的脚本在主机页中运行,因此内容脚本不可见

您可以将一个新的脚本标记插入到主机页中,并从扩展名中的.js文件中获取它,例如

var script = document.createElement('<script>');
script.src = chrome.extension.getURL('something.js');
document.appendChild(script);
var script=document.createElement(“”);
script.src=chrome.extension.getURL('something.js');
文件。追加子文件(脚本);
这将在主机页的上下文中运行
something.js
,授予它对主机页中所有其他脚本(包括您的聚合组件)的访问权限,但也使其对内容脚本不可见。请特别注意在主机页中注入脚本的步骤


如果您不能够/不愿意将所有扩展逻辑推入该注入脚本,例如,因为您需要访问
chrome.*
api或主机页和内容脚本之间的其他通信,请查看。

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

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但是不允许使用页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行。反之亦然: 页面上运行的JavaScript无法调用任何函数或访问任何 由内容脚本定义的变量

聚合组件的脚本在主机页中运行,因此内容脚本不可见

您可以将一个新的脚本标记插入到主机页中,并从扩展名中的.js文件中获取它,例如

var script = document.createElement('<script>');
script.src = chrome.extension.getURL('something.js');
document.appendChild(script);
var script=document.createElement(“”);
script.src=chrome.extension.getURL('something.js');
文件。追加子文件(脚本);
这将在主机页的上下文中运行
something.js
,授予它对主机页中所有其他脚本(包括您的聚合组件)的访问权限,但也使其对内容脚本不可见。请特别注意在主机页中注入脚本的步骤


如果您不能够/不愿意将所有扩展逻辑推入该注入脚本,例如,因为您需要访问
chrome.*
api或主机页和内容脚本之间的其他通信,请查看。

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

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但是不允许使用页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行。反之亦然: 页面上运行的JavaScript无法调用任何函数或访问