从新的 dom 按钮调用内容脚本函数
Call content script function from new dom button
这是一个
非常简单的例子:
manifest.json
{
...
"content_scripts": [
{
"js": [
"/js/external/jquery-2.1.3.min.js",
"/js/content_script.js"
],
...
}
],
...
}
content_script.js
function demo() {
alert('demo');
}
$(function() {
$( "body" ).prepend(
"<input type='"button'" value='"Press me'" onclick='"demo()'" />"
);
});
我在控制台中收到此错误:
Uncaught ReferenceError: demo is not defined
如何使功能正常工作?
这里的问题是孤立的世界。
内容脚本有自己的 JS 上下文。您可以在内容脚本上下文中定义demo
。
但是,当添加这样的 DOM 节点时,onclick
属性将引用页面上下文,该上下文没有 demo
函数。
你在这里有很多选择。
-
最简单的方法是将侦听器附加到内容脚本上下文中的节点:
var node = $('<input type="button" value="Press me"/>').click(demo); $("body").prepend(node);
-
另一种方法是在页面上下文中定义
demo()
。为此,您需要通过<script>
标记将代码注入页面上下文。var script = document.createElement('script'); script.textContent = demo.toString(); (document.head||document.documentElement).appendChild(script); script.parentNode.removeChild(script);
请注意,此代码无法访问内容脚本上下文和 Chrome API。但是,它可能很有用,因为它可以访问页面自己的JavaScript。
-
如果需要混合使用两者(访问页面和内容脚本),则需要使两个上下文进行通信。
var node = $('<input type="button" value="Press me"/>').click(demo);
$("body").prepend(node);
另一种方法是在页面上下文中定义demo()
。为此,您需要通过 <script>
标记将代码注入页面上下文。
相关文章:
- AngularJS:如何使用java脚本函数更改跨度的ng-show条件
- 无法将java脚本函数与Panel'绑定;s OnLoad事件
- Java脚本函数中的PHP(PCRE)验证
- 在HTML JavaScript头部分运行Google脚本函数
- Java脚本函数错误
- 如何调用绑定到angular元素的java脚本函数
- 为什么当我使用初始化触发器函数时,我总是找不到脚本函数:发送发票如果新
- 通过innerHTML注入脚本:函数与全局
- 如果我在 window.onbeforeunload 事件上确认是,我如何调用另一个 Java 脚本函数
- java 脚本函数中的日差
- Java脚本函数不工作
- 如何使用参数调用java脚本函数,其中参数来自字符串变量
- JAVA脚本函数中调用的ASP经典函数
- 如何在另一个java脚本函数中访问java脚本中动态html表中单元格的动态赋值
- 添加一个按钮,该按钮在单击时调用内容脚本函数
- 从java脚本函数调用ruby函数
- 未调用Java脚本函数
- 用户控制(.ascx)和java脚本函数
- 我用来禁用回车键的java脚本函数不起作用
- 如何在java脚本函数中传递php值