谷歌音乐测试版:现在使用Javascript播放上下大拇指

谷歌音乐测试版:现在使用Javascript播放上下大拇指,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我正在为Google Chrome开发我的第一个扩展。我希望能够使用我的分机点击谷歌音乐测试版页面上的“竖起大拇指”按钮。出于某种原因,竖起大拇指按钮似乎比洗牌、重复、播放、下一步和上一步复杂得多。对于所有这些,以下代码都有效: chrome.tabs.executeScript(tab_id, { code: "location.assign('javascript:SJBpost(\"" + command +

我正在为Google Chrome开发我的第一个扩展。我希望能够使用我的分机点击谷歌音乐测试版页面上的“竖起大拇指”按钮。出于某种原因,竖起大拇指按钮似乎比洗牌、重复、播放、下一步和上一步复杂得多。对于所有这些,以下代码都有效:

chrome.tabs.executeScript(tab_id,
            {
              code: "location.assign('javascript:SJBpost(\"" + command +
                    "\");void 0');",
              allFrames: true
            });
其中command=“playPause”、“nextSong”、“prevSong”、“toggleShuffle”、“togglePlay”等

我使用开发人员工具来跟踪堆栈跟踪并查看提供给SJBpost的参数,从而解决了许多问题。使用“thumbsUp”尝试SJBpost将返回错误

显然,这个问题将只限于少数人,因为不是每个人都能看到谷歌音乐的来源,但是如果你能帮我,我将非常感激

谷歌音乐页面上竖起大拇指的div如下所示:

<div id="thumbsUpPlayer" class="thumbsUp" title="Thumbs up"></div>
但是我在javascript控制台中得到了TypeError,未定义的方法消息

任何帮助都将不胜感激。我是javascript和插件以及所有这些东西的初学者,我真的很兴奋能把这些扩展的最后部分组装起来


谢谢大家!

Google Music Beta似乎实际上并不监听
click()
事件本身,而是基于通常在实际单击事件之前发生的事件:mouseover、mousedown和mouseup

我不是jQuery专家,所以我不能确切地理解为什么
$(“#thumbsUpPlayer”).mouseover().mousedown().mouseup()
不起作用(执行
.trigger

无论如何,这里有一些(在6月21日测试)可以工作的javascript代码(没有依赖项)


它应该很容易使用,如果你想竖起大拇指,只需调用
thumbsUp()
,如果你想竖起大拇指,只需调用
thumbsDown()

我今天一直在研究这个问题,发现你可以从控制台使用SJBpost触发许多命令

我已尝试并可以确认工作的命令:

  • 暂停播放
  • 拇指助手
  • 拇指向下播放器
  • 普雷夫松
  • 下松

  • 我仍在研究允许您检索当前艺术家/曲目信息的命令。如果您知道这些是什么,请告诉我。

    以下来自chrome扩展的片段可能会引起兴趣:

    function playback_action(type, callback) {
      var $button;
      if (type == 'playPause') {
        $button = $('button[data-id="play-pause"]');
      }
      else if (type == 'nextSong') {
        $button = $('button[data-id="forward"]');
      }
      else if (type == 'prevSong') {
        $button = $('button[data-id="rewind"]');
      }
      else if (type == 'currently_playing') {
        $button = $('button[data-id="play-pause"]');
      }
      if ($('button[data-id="play-pause"]').attr('disabled')) {
        $instant_mix = $('li[data-type="rd"]').click();
        setTimeout(function() {
          $('div[data-type="im"] .radio-icon').first().click();
        }, 1000);
      }
      else {
        $button.click();
      }
      callback();
    }
    

    当上述代码段停止工作时,再次检查链接,看看作者是否将扩展名更新为可以工作的内容。

    如果要触发单击,请执行
    .trigger('click')仍然会给我一个TypeError非对象属性调用。。。jQuery的多个版本可能会相互冲突吗?您正在加载哪些版本?1.5.1、1.4.2、1.5.2、1.5.1都是由已经运行的不同扩展加载的。这些是否相互冲突?每个扩展运行在不同的沙盒中,就像每个选项卡一样。您使用的是什么版本的jQuery?非常感谢您的回答!我看得出我很接近。我只是在没有修改代码的情况下尝试了它,但是我得到了一个错误:UncaughtTypeError:cannotcallmethod'dispatchEvent'为null这将是块中的第四行代码。有什么想法吗?没关系!现在,您已经使用以下行修改了我的源代码:
    location.assign(“javascript:(函数(元素){'over,down,up'.split(',')).forEach(函数(i){var event=document.createEvent('MouseEvents');event.initMouseEvent('mouse'+i,true,true,document.defaultView,1,0,0,0,false,false,false,false,0,element));element.dispatchEvent(event)})(document.getElementById(““+element+”)”)其中元素为“Thumbsupplyer”或“thumbsDownPlayer”谢谢!对我来说效果很好:)现在进入更好的音乐测试版!这些似乎都对我不起作用了。”prevSong几个月前停止工作,playPause本周刚刚停止工作。有人知道什么是最新的解决方案吗?
    
    function triggerMouseEvent(element, eventname){
        var event = document.createEvent('MouseEvents');
        event.initMouseEvent(eventname, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, element);
        element.dispatchEvent(event);
    }
    
    function replicateClick(element){
        triggerMouseEvent(element, 'mouseover');
        triggerMouseEvent(element, 'mousedown');
        triggerMouseEvent(element, 'mouseup');
    }
    
    function thumbsUp(){
        replicateClick(document.getElementById('thumbsUpPlayer'));
    }
    
    function thumbsDown(){
        replicateClick(document.getElementById('thumbsDownPlayer'));
    }
    
    SJBpost('thumbsUpPlayer');
    
    function playback_action(type, callback) {
      var $button;
      if (type == 'playPause') {
        $button = $('button[data-id="play-pause"]');
      }
      else if (type == 'nextSong') {
        $button = $('button[data-id="forward"]');
      }
      else if (type == 'prevSong') {
        $button = $('button[data-id="rewind"]');
      }
      else if (type == 'currently_playing') {
        $button = $('button[data-id="play-pause"]');
      }
      if ($('button[data-id="play-pause"]').attr('disabled')) {
        $instant_mix = $('li[data-type="rd"]').click();
        setTimeout(function() {
          $('div[data-type="im"] .radio-icon').first().click();
        }, 1000);
      }
      else {
        $button.click();
      }
      callback();
    }