在我的Chrome扩展程序的内容脚本中,我点击了某些网站上网页上的某些链接/按钮.为此,我在内容脚本中使用以下代码(我在内容脚本中嵌入了jQuery):
$(css_selector).trigger("click")
Run Code Online (Sandbox Code Playgroud)
这适用于大多数网站.
但是,在delta.com,match.com和paypal.com等某些网站上,这种触发元素点击的方式不起作用.在delta.com上,当我尝试在内容脚本中触发时,我得到以下抛出的异常:
Error: An attempt was made to reference a Node in a context where it does not exist.
Error: NotFoundError: DOM Exception 8
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我打开javascript consoleon delta.com,包含一个jQuery并尝试相同的点击触发代码片段,它就可以了.
在match.com和paypal.com上,触发只是在内容脚本中不起作用并且没有错误.我甚至无法通过javascript控制台触发"click"事件,就像我在delta.com上所做的那样.
如果我手动使用鼠标单击,所有三个网站上的一切正常.因此我也尝试使用mousedown(),mouseup()模拟它,但这也不起作用.
这似乎是个问题,因为来自这些网站的javascripts正在劫持和忽略事件.我试图从这些网站读取代码,看看发生了什么,但代码太多了.
有没有人知道这里发生了什么以及如何解决它?
我正在尝试开发测试chrome扩展,以了解JQuery如何使用chrome扩展.从提供的代码我认为它应该将弹出窗口的背景更改为黄色.
我尝试使用内容脚本并使用背景加载jquery.js.当我通过后台脚本命令加载它时,它显示已加载jquery.js.
这是我的文件:
的manifest.json
{
"name": "Hello World!",
"version": "1.0",
"manifest_version": 2,
"description": "My first Chrome extension.",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"js": ["jquery.js", "content.js"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
popup.html
<html>
<head>
<script src='jquery.js'></script>
<script src='content.js'></script>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
content.js
$('a').css({'background-color': 'yellow'});
Run Code Online (Sandbox Code Playgroud)
我的扩展文件夹中也有jquery.js.如果有人要么给我一些其他东西来试图让这个工作,或者可以向我展示一个链接jquery的chrome扩展的一个非常好的工作示例,那就太棒了!
html javascript jquery google-chrome google-chrome-extension
最初我发布了这个问题.但随后我通过反复试验获得了答案.现在我想知道我的答案能起作用的原因.
在我从扩展程序运行时保存的页面中, $("#debitCard").change();它不起作用,但是当我从Chrome控制台运行时,它有效吗?
为什么这种行为可能与从Console运行时有所不同?我甚至在里面运行它setTimeout
我甚至在点击时在HTML中创建了一个按钮,它将调用此功能,但即使这样也无效.但是,每次从控制台调用都在工作.
回答
我把它换成 $("#debitCard").change(); 了这个:
var element = document.getElementById('debitCard');
var event = new Event('change');
element.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
我想知道这个Javascript/JQuery怪癖的原因
我试图通过带有javascript的chrome扩展名从国家/地区下拉菜单中选择一个选项。当我正常通过国家/地区下拉菜单选择一个选项时,状态下拉列表中的值会根据我的选择而更改。
我尝试用多种方法选择一个选项,其中大多数是:
$('#order_billing_country').val('CANADA').trigger("change")
$('#order_billing_country').val('CANADA').trigger('select')
$('#order_billing_country').val('CANADA').trigger('onselect')
Those past 3 but triggering select, onselect, and change
$('select').find('option[value=CANADA]').attr('selected','selected').end().trigger('onselect');
Run Code Online (Sandbox Code Playgroud)
什么都没起作用...他们更改了国家/地区下拉列表中的值,但没有触发状态下拉列表中的更改。有没有办法通过javascript选择一个选项,就像我是人类一样?...
我有一个测试网页,如果我点击输入字段中的某个键,它会发出警告:
<!doctype html>
<html>
<head>
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script>
$( document ).ready( function() {
$( '#foo' ).keydown( function() { alert( "debug" ); } );
});
</script>
</head>
<body>
<input id='foo' type='type'/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我有这个chrome扩展,修改输入文本并触发keydown事件:
$( document ).ready( function() {
window.setTimeout( function() {
$( '#foo' ).val( "foo" );
$( '#foo' ).keydown();
}, 2000 );
});
Run Code Online (Sandbox Code Playgroud)
如果我安装扩展,2秒后(如预期的那样)文本被修改 - 但是没有显示警报,所以我可以建议keydown事件不会从扩展沙箱传递到页面javascript处理程序.是否有可能以某种方式修改我的代码,因此扩展可以模拟页面上的javascript可以看到的keydown?我通过chrome扩展自动化第三方网站,其中一个输入需要keyup检测价值变化(我自动化的页面写得很糟糕 - 但我没有任何控制其他源代码).