我想尝试ACQUA userscript进行stackoverflow,但出现错误:
Script error:
Error: "GM.xmlHttpRequest : Could not understand the URL :
https://acqua.kmi.open.ac.uk/predict
TypeError: URL is not a constructor
我认为它是“ acqua.kmi.open.ac.uk”,有很多子域。我该如何解决?
用户脚本代码:
// ==UserScript==
// @name ACQUA: StackExchange best answer predictor
// @namespace https://acqua.kmi.open.ac.uk/
// @description G. Gkotsis, K. Stepanyan, C. Pedrinaci, J. Domingue, and M. Liakata. It's all in the Content: State of the art Best Answer Prediction based on Discretisation of Shallow Linguistic Features. In Proceedings of the 2014 ACM Conference on Web Science, WebSci '14, pages 202-210, New York, NY, USA, 2014. ACM.
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @include http*://*.stackexchange.com/questions/*
// @include http*://stackoverflow.com/questions/*
// @include http*://askubuntu.com/questions/*
// @include http*://mathoverflow.net/questions/*
// @include http*://serverfault.com/questions/*
// @include http*://superuser.com/questions/*
// @updateURL https://acqua.kmi.open.ac.uk/page/js/bestAnswer.user.js
// @version 1.4
// @run-at document-end
// @grant GM.xmlHttpRequest
// ==/UserScript==
// GM_getResourceURL
URL = "https://acqua.kmi.open.ac.uk/predict"; //?URL=" + encodeURIComponent(document.URL);
GM.xmlHttpRequest({
method: "GET",
url: URL,
onload: function(xhr) {
id = "#answer-"+xhr.responseText;
var num = parseInt(xhr.responseText) || 0;
if (num==0){
$("#header").append("<div style='display:-moz-inline-stack;display:inline-block;background:url(https://acqua.kmi.open.ac.uk/page/img/acqua-icon-white.png) 5px 8px no-repeat #9a3334;margin:-15px 0;font-size:medium;padding:12px 10px 6px 34px;color:#fff;zoom:1;*display:inline;'>Acqua: You need to <a href='https://acqua.kmi.open.ac.uk/authenticate' style='color:#fff;border-bottom:1px solid #fff;' target=='_new' title='Authenticate'>authenticate</a></div>");
}
else
$("#header").append("<div style='display:-moz-inline-stack;display:inline-block;background:url(https://acqua.kmi.open.ac.uk/page/img/acqua-icon-white.png) 5px 8px no-repeat #003366;margin:-15px 0;font-size:medium;padding:12px 10px 6px 34px;color:#fff;zoom:1;*display:inline;'>Acqua is loaded</div>(<a href='#"+num+"'>jump to the answer</a>)");
$(id).prepend( "<div style='display:block;text-align:right;padding:20px 15px 0 0'><a href='https://acqua.kmi.open.ac.uk' title='ACQUA' target='_blank'><img src='https://acqua.kmi.open.ac.uk/page/img/acqua-icon.png' alt='ACQUA icon'></a></div>");
$(id).css({"border-color": "#1b75bb",
"border-width":"5px",
"border-style":"solid"});
$(id).append("<span style='background:url(https://acqua.kmi.open.ac.uk/page/img/acqua-icon-white.png) #1b75bb no-repeat 15px 0px;display:block;color:#fff;padding:5px 15px 5px 45px;float: right;' id='acquafeedback'>ACQUA: Did you find this useful? <a id='acquayes' style='background:#003366;margin-left:6px;padding:2px 2px;color:#fff'>Yes</a> <a id='acquano' style='background:#003366;margin-left:6px;padding:2px 2px;color:#fff'>No</a></span>");
$('#acquayes').hover(function(){
$(this).css('background','#9a3334');
}, function(){$(this).css('background','#003366');}
);
$('#acquano').hover(function(){
$(this).css('background','#9a3334');
}, function(){$(this).css('background','#003366');}
);
$("#acquayes").click (function () {
$.ajax({
url: "https://acqua.kmi.open.ac.uk/feedback?answer=yes&id="+xhr.responseText,
jsonp: "callback",
dataType: "jsonp",
data: {
q: "",
format: "json"
},
success: function( response ) {
;
}, error:function(response){$('#acquafeedback').html("Thank you!");}
});
});
$("#acquano").click (function () {
$.ajax({
url: "https://acqua.kmi.open.ac.uk/feedback?answer=no&id="+xhr.responseText,
jsonp: "callback",
dataType: "jsonp",
data: {
q: "",
format: "json"
},
success: function( response ) {
;
}, error:function(response){$('#acquafeedback').html("Thank you!");}
});
});
}
});
答案 0 :(得分:1)
我认为它是“ acqua.kmi.open.ac.uk”,其中有很多子域
根本不是问题。
URL
是现有JS接口的名称,https://developer.mozilla.org/en-US/docs/Web/API/URL
为您的变量命名不同。
答案 1 :(得分:1)
URL
是global built-in function in browsers。
请勿尝试覆盖它。
一种快速而肮脏的技巧是仅使用一个不同的名称。
更好的解决方案是使用IIFE避免首先创建新的全局变量。
(function () {
var URL = "https://acqua.kmi.open.ac.uk/predict"; //?URL=" +
encodeURIComponent(document.URL);
GM.xmlHttpRequest({
method: "GET",
// etc ...
)();