我正在尝试将非私人数据输入我的网页,然后在完全不同的网站上使用这些数据,以获得我想要带回我的网页的结果。 虽然是一个免费的在线计算器(WHO工具),公式是隐藏/专有的,否则我只是将公式合并到我的网页,所以我被困在使用他们的服务器进行计算。 我的计划是在我的网页上输入数据,将其保存到localStorage,然后使用FireFox,使用Greasemonkey脚本从存储中检索数据,将其输入计算器并查找结果。 我是新手,并且遇到了问题,因为看起来localStorage / sessionStorage / Cookies不会将他们的数据共享到不同的网页域。 我尝试了localStorage.setItem(“age”,age.value)和检索 - 可以在同一工作区中检索,但不能在新网站上检索。 我认为这个问题是安全问题,但我不担心是否有人拦截数据,因为它对他们没用。
这是我的网页简化代码(为简单起见,我只包含一个变量,并输入检索代码,显示数据可供本地使用):
<html>
<head>
<title>Ostoporosis assessment</title>
<script type="text/javascript">
function saveData() {
var age = document.getElementById("age");
localStorage.setItem("age", age.value);
window.open('https://www.shef.ac.uk/FRAX/tool.jsp', '_blank');
}
function clearData() {
document.getElementById("age").value= "";
}
function getData() {
var age = localStorage.getItem("age");
document.getElementById("age").value= age;
}
</script>
</head>
<body>
<p>Age:<input name="age" id="age" type="text" ></p>
<p><input name="Frax" id="Frax" type="button" value="Get Frax" onclick="saveData()"></p>
<p><input name="clearAge" id="clearAge" type="button" value="Clear age" onclick="clearData()"><input name="getAge" id="getAge" type="button" value="Get stored age" onclick="getData()"></p>
<p> Result</p>
<p><input name="result" id="result" type= "textbox"></p>
</body>
</html>
这是我的GreaseMonkey脚本:
// ==UserScript==
// @name FraxCalculator
// @namespace DavidScripts
// @description UK online calculator
// @include https://www.shef.ac.uk/FRAX/tool*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
// @version 1
// @grant none
// ==/UserScript==
window.addEventListener("load",function(){
var age = localStorage.getItem("age");
$('#ContentPlaceHolder1_toolage').val(age);
/*$('#ContentPlaceHolder1_toolage').val(55);
$("#ContentPlaceHolder1_sex1").attr('checked', 'checked');
$('#ContentPlaceHolder1_toolweight').val(60);
$('#ContentPlaceHolder1_ht').val(160);
$('#ContentPlaceHolder1_btnCalculate').click();*/
}, false);
所以我需要做的是将年龄从第一个网页传递到在第二个网页上运行的GM脚本(我注释掉了硬编码的GM脚本,该脚本证明了一旦我找到转移的方式它将会起作用信息,然后将此结果返回到我的网页。 我还没有弄清楚如何将结果返回到我的网页,但假设我将能够使用将数据带到计算器的技术。 感谢您提供任何指导。
答案 0 :(得分:0)
我通过将参数附加到URL来解决了我的问题。 greasemonkey在另一端工作并拆分参数,然后我在Stack Overflow上发现了一段有用的代码,它将每个参数分开,以便可以在目标页面上自动使用它,然后使用相同的技术将结果发回。这是一个缩减版本:
主要代码
var c = $('#Height').val();
var d = $('#Weight').val();
if ( $('#previousFractureY').prop('checked') == true) {
var e = 1;
} else e = 0;
window.open('https://www.shef.ac.uk/FRAX/tool.jsp?c='+c+'&d='+d+'&e='+e);
window.close();
<p>Height:<input name="Height" id="Height" type="text" value=160>cm</p>
<p>Weight:<input name="Weight" id="Weight" type="text" value=60>kg</p>
<p>Previous Fracture: No<input value="no" name="previousFracture" id="previousFractureN" type="radio" checked />Yes<input value="yes" name="previousFracture" id="previousFractureY" type="radio" /> <p>
GM代码示例:
// ==UserScript==
// @name FraxCalculator
// @namespace Scripts
// @description UK online calculator
// @include https://www.shef.ac.uk/FRAX/tool*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
// @version 1
// @grant none
// ==/UserScript==
window.addEventListener("load",function(){
var QueryString = function () {
// This function is anonymous, is executed immediately and
// the return value is assigned to QueryString!
var query_string = {};
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
// If first entry with this name
if (typeof query_string[pair[0]] === "undefined") {
query_string[pair[0]] = decodeURIComponent(pair[1]);
// If second entry with this name
} else if (typeof query_string[pair[0]] === "string") {
var arr = [ query_string[pair[0]],decodeURIComponent(pair[1]) ];
query_string[pair[0]] = arr;
// If third or later entry with this name
} else {
query_string[pair[0]].push(decodeURIComponent(pair[1]));
}
}
return query_string;
}();
$('#ContentPlaceHolder1_toolage').val(QueryString.a);
$("#ContentPlaceHolder1_sex2").attr('checked', true);
$('#ContentPlaceHolder1_btnCalculate').click();
setTimeout(function(){
var result1 = $('#ContentPlaceHolder1_lbrs1').html();
var result2 = $('#ContentPlaceHolder1_lbrs2').html();
}, 1000);
}, false);