Javascript Bookmarklet在ios或android浏览器上不工作

Javascript Bookmarklet在ios或android浏览器上不工作,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有这个代码,它是一个bookmarklet: javascript:(function(e,a,g,h,f,c,b,d){if(!(f=e.jQuery)||g>f.fn.jquery||h(f)){c=a.createElement("script");c.type="text/javascript";c.src="cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js";c.onload=c.onreadystatechange=f

我有这个代码,它是一个bookmarklet:

javascript:(function(e,a,g,h,f,c,b,d){if(!(f=e.jQuery)||g>f.fn.jquery||h(f)){c=a.createElement("script");c.type="text/javascript";c.src="cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js";c.onload=c.onreadystatechange=function(){if(!b&&(!(d=this.readyState)||d=="loaded"||d=="complete")){h((f=e.jQuery).noConflict(1),b=1);f(c).remove()}};a.documentElement.childNodes[0].appendChild(c)}})(window,document,"3.4.1",function($,L){var url1 = "download-video-youtube1.p.rapidapi.com/mp3/";var url2 = window.location.href.substring(32);var url3 = url1 + url2;var settings = { "url": url3 , "method": "GET", "headers": {"x-rapidapi-host": "download-video-youtube1.p.rapidapi.com","x-rapidapi-key": "[my apikey here]" } }; $.ajax(settings).done(function(response){ window.location.href = "https://" + response.vidInfo[0].dloadUrl;});});
它在firefox和chrome上运行良好,但在android上无法与ios safari、ios快捷方式或chrome一起运行

它检查是否有jquery的特定版本,如果没有,它会将其附加到DOM中,然后运行api请求并返回任何youtube视频的Mp3下载链接

这是我的第三个问题,也是最后一个问题,因为到目前为止我还没有得到答案。 我知道这次也不会了,别介意我把它记在这里作为日记。


再见

不确定会出现什么问题,代码看起来不错(因为我已经进行了反向工程)。如果您创建了bookmarklet,请包含完整的源代码

  • 也许您需要在脚本url中包含协议
  • 另外,请确保jQuery的版本与您的Safari/Android浏览器兼容
注意:如果您愿意,可以将jQuery扔进垃圾箱并使用承诺。看一看

(函数(){
让script=document.createElement(“脚本”);
script.type=“text/javascript”;
script.src=”https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js";
script.onload=script.onreadystatechange=function(e){
$.ajax({
“url:“download-video-youtube1.p.rapidapi.com/mp3/”+window.location.href.substring(32),
“方法”:“获取”,
“标题”:{
“x-rapidapi-host”:“download-video-youtube1.p.rapidapi.com”,
“x-rapidapi-key”:“[我的apikey在此]”
}
}).完成(功能(响应){
window.location.href=“https://”+response.vidInfo[0].dloadUrl;
});
};
document.documentElement.childNodes[0].appendChild(脚本);

})();不确定可能是什么问题,代码看起来不错(因为我已经进行了反向工程)。如果您创建了bookmarklet,请包含完整的源代码

  • 也许您需要在脚本url中包含协议
  • 另外,请确保jQuery的版本与您的Safari/Android浏览器兼容
注意:如果您愿意,可以将jQuery扔进垃圾箱并使用承诺。看一看

(函数(){
让script=document.createElement(“脚本”);
script.type=“text/javascript”;
script.src=”https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js";
script.onload=script.onreadystatechange=function(e){
$.ajax({
“url:“download-video-youtube1.p.rapidapi.com/mp3/”+window.location.href.substring(32),
“方法”:“获取”,
“标题”:{
“x-rapidapi-host”:“download-video-youtube1.p.rapidapi.com”,
“x-rapidapi-key”:“[我的apikey在此]”
}
}).完成(功能(响应){
window.location.href=“https://”+response.vidInfo[0].dloadUrl;
});
};
document.documentElement.childNodes[0].appendChild(脚本);

})();非常感谢!我试过使用Jquery的最低版本,现在它可以工作了,但只在ios safari上运行……你知道为什么不在android chrome上运行吗?我使用的是jquery版本1.8.0,chrome是否可能不支持它,即使它已经很旧了?另外,在脚本url中添加协议是什么意思?我会记住你关于使用fetch方法的建议,在处理完这件棘手的事情后,我一定会给它一个机会@FrancoPolato添加了一个fetch示例。它可能不是万无一失的,但我没有钥匙要测试。非常感谢!!我真的很感谢你的承诺!我要学习你的脚本来理解这个方法!多谢各位!我试过使用Jquery的最低版本,现在它可以工作了,但只在ios safari上运行……你知道为什么不在android chrome上运行吗?我使用的是jquery版本1.8.0,chrome是否可能不支持它,即使它已经很旧了?另外,在脚本url中添加协议是什么意思?我会记住你关于使用fetch方法的建议,在处理完这件棘手的事情后,我一定会给它一个机会@FrancoPolato添加了一个fetch示例。它可能不是万无一失的,但我没有钥匙要测试。非常感谢!!我真的很感谢你的承诺!我要学习你的脚本来理解这个方法!