组件ID可以在Chrome控制台通过$find找到,但不能在外部注入代码中找到
Component ID can be found by $find in Chrome console but not in external injection code
它有一个网页使用 microsoftajax 来创建确认对话框,ComponentID可以通过$find(或Sys.Application.findComponent)在Chrome控制台和Sys.Application.getComponents中找到ID组件列表,但是当我将代码注入Chrome扩展的内容脚本时,结果总是返回'NULL'除了DOM操作。我只是想更改组件的属性以实现自动确认,而无需手动单击,但这似乎很难做到。这是我的代码:
$(document).ready(function(){
Sys.Application.getComponents() //return 'NULL'
Sys.Application.findComponent('sth')._ConfirmOnFormSubmit=true //return 'Cannot set property '_ConfirmOnFormSubmit' of null '
})
function pageLoad(sender,args) {
//Sys.Application.initialize()
console.log($find('sth')) //return 'NULL'
function confirm() {return true} //seems to approach the fact working well that bypassed the dialog in chrome console but still not working in Content Script
}
为什么Content和Console的结果不同?我该怎么做才对呢?
如果有人能给我一个解决办法,我会非常感激。
问好。
您看到这种行为的原因是内容脚本存在于一个孤立的上下文中。他们不能访问页面的JavaScript和它的状态。
要进行测试,您可以打开控制台并在顶部将上下文从<top frame>
切换到扩展的上下文。您将看到不同的控制台结果。
要解决这个问题,你需要注入另一个时间,这一次从内容脚本到页面的上下文中;然后,您可以使用自定义事件或window.postMessage()
在两者之间通信数据。
这是一个典型的问题
相关文章:
- JS可以在Chrome中工作,但不能在Firefox中工作
- WebRTC视频聊天可以在FF中使用,但不能在Chrome中使用
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- 三角库可以与firefox一起使用,但不能在Chrome中使用
- Highcharts可以从服务器加载数据,但不能更新
- 刷新GoogleMaps tile服务器可以使用JavaScript,但不能使用GWT
- node.js可以识别字符模式,但不能识别数字模式
- 如何在元素中处理鼠标事件,但不能在其子元素上处理
- Json到CSV下载,可以在chrome中工作,但不能在IE浏览器中工作
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- Javascript可以在chrome中使用,但不能在其他浏览器中使用
- Iframe加载调整大小在Chrome中工作,但不能在IE或Firefox中工作
- Rails Production-可以工作,但不能编辑/删除/创建记录
- 能够在Highcharts中看到值,但不能看到图形
- CSS和Javascript可以在内部服务器上工作,但不能在外部工作
- 视频外部按钮不能在手机上播放,但可以在桌面/移动设备上运行
- 类已经或正在使用名称'SafeUrl'从外部模块获取,但不能命名
- 在页面样式标签内加载CSS,但不能从外部样式表加载
- Jquery函数包含外部变量,但不能读取
- 组件ID可以在Chrome控制台通过$find找到,但不能在外部注入代码中找到