传输数据以供其他网站使用

Transferring data for use in a different website

本文关键字:网站 其他 数据 传输      更新时间:2023-09-26

我试图将非私人数据输入我的网页,然后在一个完全不同的网站上使用这些数据来获得结果,然后我想带回我的网页。虽然这是一个免费的在线计算器(世界卫生组织的工具),但公式是隐藏的/专有的,否则我就把公式合并到我的网页上,所以我被困在使用他们的服务器来做计算。我的计划是在我的网页上输入数据,将其保存到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脚本,这表明它将起作用,一旦我找到了一种传递信息的方法),然后将此结果带回我的网页。我还没有弄清楚如何将结果返回到我的网页,但假设我将能够使用将数据带到计算器的技术。谢谢你的指导。

我通过将参数附加到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);