Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展-SoundCloud页面操作_Javascript_Google Chrome_Google Chrome Extension_Google Chrome Devtools - Fatal编程技术网

Javascript Chrome扩展-SoundCloud页面操作

Javascript Chrome扩展-SoundCloud页面操作,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我正在构建一个页面操作chrome扩展,当我在SoundCloud上操作内容时遇到了问题。我希望我的扩展能够分析页面上每首歌曲的播放、喜欢、回复和评论,然后根据提要中每首歌曲的数据添加其他信息 问题是,当页面加载时,没有声音加载到提要中,而是在页面加载后由java脚本加载声音。因此,当我在加载扩展名的情况下读取文档时,没有数据可读取。最初,我通过添加从页面加载到内容脚本运行的延迟来解决这个问题,但当用户进一步向下滚动并加载更多歌曲时,这不起作用 有人对我可以用什么作为运行内容脚本的指标有什么想法

我正在构建一个页面操作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的函数时,您的代码也可以运行。请查看上的规范问题。如果您找到一个合适的元素来监听,这可能会有所帮助。