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