首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不能通过单击图像来调用内容脚本的函数

不能通过单击图像来调用内容脚本的函数
EN

Stack Overflow用户
提问于 2012-07-02 14:54:23
回答 2查看 3.2K关注 0票数 0

这就是我现在所拥有的:

"manifest.json“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{..."permissions": [
"https:/mywebsite.com/"],"content_scripts": [{
  "matches" : ["http://*/*", "https://*/*"],
  "js": ["js/jquery-1.7.2.min.js", "contentScript1.js", "contentScript2.js"],
  "all_frames" : true,
  "run_at": "document_end"
} ]}

"contentScript1.js“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).ready(function() {
$('#someDiv').load('https://mywebsite.com/index.html');}

"contentScript2.js“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function showMessage()
{alert ('Hello World!');}

"index.html“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="" onclick="showMessage();"> <img src="https://mywebsite.com/images/myimage.png"></a>

实际上,我在这里所做的是将一张可点击的图片注入到我正在访问的页面的代码中,我希望通过单击该图片,将出现一条"Hello“消息。尽管内容脚本和图片是成功加载的,但当我单击该图像时,将不会调用该函数,并在控制台中得到以下错误:

Uncaught : showMessage未定义为

我想它在我注入代码的网站上找不到函数,而不是在内容脚本中。但是为什么,我的意思是,如果在加载内容脚本时调用函数,而不是单击图像,消息就会出现。有人能把我弄出去吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-03 23:46:28

您不理解我的解决方案,以避免冲突,不适用于您的当前代码。不是使用$.noConflict,而是将脚本注入函数封装在$().ready方法中。

您必须从清单的jQuery部分中删除"js"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "js": ["contentScript1.js"],

contentScript1.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function injectJs(srcFile) {
    var scr = document.createElement('script');
    scr.src = srcFile;
    document.getElementsByTagName('head')[0].appendChild(scr);
}
injectJs(chrome.extension.getURL('js/jquery-min.js'));
injectJs(chrome.extension.getURL('js/yourscript.js'));

不要忘记将js/yourscript.js添加到web_accessible_resources中,这样就可以使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"web_accessible_resources": [
    "index3.html",
    "js/jquery-min.js"
    "js/yourscript.js"
]

js/yourscript.js中,将函数逻辑与$.noConflict一起封装在一个匿名函数中。$.noConflict(true)用于避免与页面中的脚本发生冲突。它恢复了$jQuery的原始值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(function(jQuery, $) {
    // Here, you can do anything you want.
    // jQuery and $ refer to the same jQuery object from `js/jquery-min.js`

})(jQuery, jQuery.noConflict(true));

在再次查看您的问题之后,我注意到您正在通过ajax:$('#someDiv').load(...)加载内容。当脚本被注入时,它在页面的范围内运行。这就是AJAX调用失败的原因:由于同源政策,请求被阻塞。

现在,我们可以使用不同方法来修复您的代码。我们没有将逻辑从内容脚本移动到页面(通过注入的脚本),而是修改页面index.html。单击事件不是预先设置的,而是添加到内容脚本中的.例如:

"index.html":

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="" id="showMessage"> <img src="https://mywebsite.com/images/myimage.png"></a>

"contentscript2.js":

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$('#showMessage').click(showMessage);
票数 1
EN

Stack Overflow用户

发布于 2012-07-03 03:46:53

我想我要回答我自己的问题:

之所以会发生这种情况,是因为内容脚本运行在一个孤立的世界(请参阅:Scripts.html#execution-环境 )。

因此,一旦注入了一些html代码,您就不能在content_scripts中调用函数来执行用户当前页面中的一些工作。

您所要做的就是像使用html代码一样,在页面中注入脚本。所以:

(1)在清单文件中添加要注入web资源的文件(请参阅:资源 )

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"web_accessible_resources": [
"Script2.js",
 "index.html",
"jquery-1.7.2.min.js"]

(2)在contentScript1.js中(将其作为content_script)加载)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //inject your javascript files to the head of the page
function injectJs(srcFile) {
   var scr = document.createElement('script');
   scr.type="text/javascript";
   scr.src=srcFile;
   document.getElementsByTagName('head')[0].appendChild(scr);
}

injectJs(chrome.extension.getURL('jquery-1.7.2.min.js'));
injectJs(chrome.extension.getURL('Script2.js'));

//inject your html by loading query and passing your html page
$(document).ready(function() {
$('#someDiv').load(chrome.extension.getURL('./index.html'));}

仅此而已!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11302243

复制
相关文章
matlab调用python库函数和自定义脚本函数
作者:matrix 被围观: 4,430 次 发布时间:2019-07-15 分类:零零星星 | 无评论 »
HHTjim 部落格
2022/09/26
7700
matlab调用python库函数和自定义脚本函数
【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )
在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy 脚本 ;
韩曙亮
2023/03/30
2K0
函数c()_函数的调用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/15
3.5K0
选择篇(040)-单击下面的html片段打印的内容是什么?
如果我们单击p,我们会看到两个日志:p和div。在事件传播期间,有三个阶段:捕获,目标和冒泡。默认情况下,事件处理程序在冒泡阶段执行(除非您将useCapture设置为true)。它从最深的嵌套元素向外延伸。
齐丶先丶森
2022/05/12
9670
【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
Java 类中调用 Groovy 脚本 , 与 Groovy 类中调用 Groovy 脚本 , 代码基本类似 ;
韩曙亮
2023/03/30
1.9K0
【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
图像检索:基于内容的图像检索技术(三)
无论是对于相同物体图像检索还是相同类别图像检索,在大规模图像数据集上,它们具有三个典型的主要特征:图像数据量大、特征维度高以及要求相应时间短。下面对这三个主要特征逐一展开说明:
用户3578099
2020/03/04
2.4K0
图像检索:基于内容的图像检索技术(四)
基于树结构的最近邻搜索方法和基于哈希的最近邻搜索方法在理论计算机科学、机器学习以及计算机视觉中是一个很活跃的领域,这些方法通过将特征空间划分成很多小的单元,以此减少空间搜索的区域,从而达到次线性的计算复杂度。
用户3578099
2020/03/18
1.5K0
图像检索:基于内容的图像检索技术(一)
在Web2.0时代,尤其是随着Flickr、Facebook等社交网站的流行,图像、视频、音频、文本等异构数据每天都在以惊人的速度增长。例如, Facebook注册用户超过10亿,每月上传超过10亿的图片;Flickr图片社交网站2015年用户上传图片数目达7.28亿,平均每天用户上传约200万的图片;中国最大的电子商务系统淘宝网的后端系统上保存着286亿多张图片。针对这些包含丰富视觉信息的海量图片,如何在这些浩瀚的图像库中方便、快速、准确地查询并检索到用户所需的或感兴趣的图像,成为多媒体信息检索领域研究的热点。基于内容的图像检索方法充分发挥了计算机长于处理重复任务的优势,将人们从需要耗费大量人力、物力和财力的人工标注中解放出来。经过十来来的发展,基于内容的图像检索技术已广泛应用于搜索引擎、电子商务、医学、纺织业、皮革业等生活的方方面面。
用户3578099
2020/03/04
3.5K0
图像检索:基于内容的图像检索技术(二)
相同物体图像检索是指对查询图像中的某一物体,从图像库中找出包含有该物体的图像。这里用户感兴趣的是图像中包含的特定物体或目标,并且检索到的图片应该是包含有该物体的那些图片。如1.3图所示,给定一幅”蒙娜丽莎”的画像,相同物体检索的目标就是要从图像库中检索出那些包含有”蒙娜丽莎”人物的图片,在经过相似性度量排序后这些包含有”蒙娜丽莎”人物的图片尽可能的排在检索结果的前面。相似物体检索在英文文献中一般称为物体检索(Object Retrieval),近似样本搜索或检测(Duplicate Search or Detection)也可以归类于相同物体的检索,并且相同物体检索方法可以直接应用到近似样本搜索或检测上。相同物体检索不论是在研究还是在商业图像搜索产业中都具有重大的价值,比如购物应用中搜索衣服鞋子、人脸检索等。
用户3578099
2020/03/04
1.3K0
匿名函数自调用_自己调用自己的函数叫
我们知道一个HTML文件在被加载的时候是从根标签html依次往下的,在遇到link,script等标签引入的外部资源时,下载外部资源,并执行外部资源。在js中,表达式会被立即执行,也就是说,不管是引入的外部js文件还是嵌入在html文件中的js脚本,其中的表达式都会被立即执行。 函数名是一个指向函数的指针。在JavaScript中,定义函数有常见的两种形式:函数声明和函数直接量(或者叫函数表达式)。 函数声明:采用function定义声明函数的标准写法,包括function,函数名,函数体。如
全栈程序员站长
2022/11/09
2.5K0
JAVA调用Shell脚本
在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。 JAVA调用很简单,例子如下: 首先是shell脚本 /users/bmcmsend_linux/server/bin/msend -n @10.26.202.27:1828#mc -a TRKUTIL_EV -v -j /users/bmcmsend_linux/server
Java学习123
2018/05/16
3.1K0
oozie调用shell脚本
job.properties nameNode=hdfs://cdh01:8020 resourceManager=cdh01:8032 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/ssh exec=log.sh shellpath=${nameNode}/user/${user.name}/${examplesRoo
静谧星空TEL
2021/04/27
1.4K0
奇怪的函数调用
整理移动硬盘时,发现一个名为 attack 的目录,进去以后发现原来是一段简单的 C 语言代码。代码如下:
码农UP2U
2021/09/02
1.7K0
奇怪的函数调用
当「分割一切」遇上图像修补:无需精细标记,单击物体实现物体移除、内容填补、场景替换
来源:机器之心 Paper Weekly本文约2000字,建议阅读5分钟本文介绍了分割模型在图像修补上的功能操作。 这次,强大的「分割一切」模型——Segment Anything Model,在图像修补任务上碰撞出了火花。 4 月初,Meta 发布了史上首个图像分割基础模型--SAM(Segment Anything Model)[1]。作为分割模型,SAM 的能力强大,操作使用方式也十分友好,比如用户简单地点击来选择对应物体,物体就会立即被分割出来,且分割结果十分精准。截至 4 月 15 号,SAM 的
数据派THU
2023/05/11
2790
当「分割一切」遇上图像修补:无需精细标记,单击物体实现物体移除、内容填补、场景替换
当「分割一切」遇上图像修补:无需精细标记,单击物体实现物体移除、内容填补、场景替换
机器之心专栏 机器之心编辑部 这次,强大的「分割一切」模型——Segment Anything Model,在图像修补任务上碰撞出了火花。 4 月初,Meta 发布了史上首个图像分割基础模型--SAM(Segment Anything Model)[1]。作为分割模型,SAM 的能力强大,操作使用方式也十分友好,比如用户简单地点击来选择对应物体,物体就会立即被分割出来,且分割结果十分精准。截至 4 月 15 号,SAM 的 GitHub 仓库的 Star 数高达 26k。 如何利用好如此强大的「分割一
机器之心
2023/04/21
1K0
当「分割一切」遇上图像修补:无需精细标记,单击物体实现物体移除、内容填补、场景替换
java调用python脚本返回的参数_javaweb调用python
实际工程项目中可能会用到 Java 和 python 两种语言结合进行,这样就会涉及到一个问题,就是怎么用 Java 程序来调用已经写好的 python 脚本呢,一共有四种方法可以实现:
全栈程序员站长
2022/11/01
4.6K1
oracle函数的调用应使用execute命令_matlab函数调用
之前一直使用的MySQL数据库,第一次接触Oracle就用到了函数和存储过程,今天跟大家分享一下使用过程.
全栈程序员站长
2022/10/04
2.2K0
oracle函数的调用应使用execute命令_matlab函数调用
JavaScript 的 this 小结纯粹的函数调用作为对象方法的调用作为构造函数调用apply 调用
函数的不同使用场合,this有不同的值。 总的来说,this就是函数运行时所在的环境对象。 下面分情况,详细讨论
JavaEdge
2018/08/02
2.7K0
JavaScript 的 this 小结纯粹的函数调用作为对象方法的调用作为构造函数调用apply 调用
【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )
在 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 ) 博客中 , 已经分析了 Groovy 脚本的本质 , Groovy 脚本继承了 groovy.lang.Script 类 ;
韩曙亮
2023/03/30
1.9K0
【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )
点击加载更多

相似问题

不能通过单击调用函数参数

13

在我的代码中通过单击图像来调用php函数

22

通过单击图像调用函数

10

如何通过单击按钮来调用此脚本

20

单击“不调用”键入脚本函数。

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文