Javascript Chrome扩展-SoundCloud页面操作
我正在构建一个页面操作chrome扩展,当我在SoundCloud上操作内容时遇到了问题。我希望我的扩展能够分析页面上每首歌曲的播放、喜欢、回复和评论,然后根据提要中每首歌曲的数据添加其他信息 问题是,当页面加载时,没有声音加载到提要中,而是在页面加载后由java脚本加载声音。因此,当我在加载扩展名的情况下读取文档时,没有数据可读取。最初,我通过添加从页面加载到内容脚本运行的延迟来解决这个问题,但当用户进一步向下滚动并加载更多歌曲时,这不起作用 有人对我可以用什么作为运行内容脚本的指标有什么想法吗。换句话说,我可以使用什么线索来确定页面上有新歌曲要分析Javascript Chrome扩展-SoundCloud页面操作,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我正在构建一个页面操作chrome扩展,当我在SoundCloud上操作内容时遇到了问题。我希望我的扩展能够分析页面上每首歌曲的播放、喜欢、回复和评论,然后根据提要中每首歌曲的数据添加其他信息 问题是,当页面加载时,没有声音加载到提要中,而是在页面加载后由java脚本加载声音。因此,当我在加载扩展名的情况下读取文档时,没有数据可读取。最初,我通过添加从页面加载到内容脚本运行的延迟来解决这个问题,但当用户进一步向下滚动并加载更多歌曲时,这不起作用 有人对我可以用什么作为运行内容脚本的指标有什么想法
谢谢我做了一些类似的事情,我找到的解决方案是创建我自己的onElementInsert函数并不断检查,直到内容注入页面 为了满足您的需要,我对代码做了一些修改。它可能需要您进行其他更改:
function onElementInsert( parent, func ) {
var startingElementCount = parent.childNodes.length;
// Checks to see if the element's number of immediate children nodes increased
var checkChildCount = function(count) {
if ( count < parent.childNodes.length ) {
func();
return true;
}
return false;
}
// Interval function to repeat every 100 milliseconds
var interval = window.setInterval( function() {
// Check if there are any new children
if ( checkChildCount(startingElementCount) ) {
// If so then trigger the insert event
document.dispatchEvent( new Event('insertEvent') );
}
}, 100 );
// Add an event listener for our insert event which will tell our interval to stop
document.addEventListener('insertEvent', function (e) {
clearInterval(interval);
}, false);
}
onElementInsert( document.getElementsByClassName('lazyLoadingList')[0].childNodes[0], function() {
// Enter code here to execute when content has been added
});
这里发生的事情的细目如下:
此代码调用函数onElementInsertele,func将持续检查是否有任何新的子节点添加到传递给它的元素ele中。
当插入发生时,它将执行函数func和
将触发“insertEvent”,通知函数停止
检查是否有进一步的插入。
类名为“lazyLoadingList”的元素是我发现SoundCloud将其soundList项加载到的元素。你可能想自己再检查一下
需要注意的另一件事是,这将只检查您传入的元素的新的直接子元素,而不会检测子元素的子元素。因此,当您使用它时,请确保在插入内容的元素上调用它,或者将其更改为检查所有子元素。您可以使用内容脚本将代码注入原始页面中的JS函数,以便在触发类似play_music的函数时,您的代码也可以运行。请查看上的规范问题。如果您找到一个合适的元素来监听,这可能会有所帮助。