我已经尝试到处寻找答案,所以请原谅我,如果它出现在某个地方,我无法找到它。
我正在编写一个简单的Chrome扩展程序,它在页面上放置按钮,用于更改该页面上输入项的值。
我的content.js文件的简化版本:
urlField = $('#someidonthepage');
function changeValue(){
urlField.val('test');
}
当我在控制台中执行此代码时,它工作正常,我可以调用该函数。但是,使用我的扩展名,只有当我在函数内部声明urlField 时,它才有效。
如果不是因为我有一堆函数和变量,而且我觉得将所有10个函数和变量都声明为非常低效,这显然不是什么大问题。每个功能。
我尝试使用"窗口。"以及我在网上发现的有关全局变量的其他内容,但我开始认为这与Chrome Extensions有关,而不是错误的语法,因为它在控制台中运行良好。
我几乎只是开始编程,所以请告诉我是否还有其他信息我可以提供!
提前致谢!
答案 0 :(得分:1)
显而易见的原因是,网页在加载后会重新创建元素。
因此,当注入内容脚本时初始化全局变量时,它包含undefined
值(如果元素不存在)或元素的过时版本,稍后将重新创建。
另一方面,当您从事件处理程序访问元素时,会选择实际存在的元素。
最简单的解决方案是避免使用全局变量。
否则请看一下:
"run_at": "document_end"
键
$(function() { ........ })
包装器在jQuery中执行相同的操作