2015-01-05 3 views
0

Я создаю небольшой гаджет боковой панели Windows для заметок в простой textarea.Может ли Windows Gadget сохранять данные?

enter image description here

Я, как обычно, gadget.xml файл манифеста и .html файл, смотрите ниже.

Как можно прочитать некоторые данные/сохранить некоторые данные в гаджете?

Я знаю, что это, как правило, невозможно с JavaScript только (примечания: использование localstorage не представляется возможным, потому что я хочу послесвечение данных), так , как сохранить/чтение данных внутри Windows Gadget?


<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=Unicode" /> 
     <title>NeverForget</title> 
     <style type="text/css"> 
     body 
     { 
      margin: 0; 
      width: 300px; 
      height: 200px;    
      background-color: transparent; 
     } 
     #gadgetContent 
     { 
      width: 100%; 
      height: 100%; 
      overflow: hidden; 
      border: none; 
      background-color: transparent; 
     } 
     </style> 
     <script type="text/jscript" language="jscript"> 
      function init() { 
       // how to load notes from a file here on startup? 
      } 
      window.onkeydown = function() { 
       // how to save data to file? 
      } 
     </script> 
    </head> 

    <body onload="init()"> 
      <textarea id="gadgetContent">Bonjour</textarea> 
    </body> 
</html> 

ответ

1

Попробуйте один из них:

  1. Есть Встроенная methods of the System.Gadget.Settings object, который может быть использован для чтения/записи из Settings.ini файла (хранится в C: \ Users \ [user] \ AppData \ Local \ Microsoft \ Windows Sidebar), но эта информация будет потеряна, если гаджет будет закрыт или удален.

  2. Используйте FileSystemObject для создания или чтения или записи папок/файлов в любом месте. Ограничение: файл может быть сохранен только как unicode или ascii.

  3. Используйте ADO Stream object для создания или чтения или записи файлов в любом месте. Ограничение: невозможно создать папки - должно использоваться вместе с файловым файлом. Преимущество: можно использовать любую кодовую страницу, которая существует на вашем компьютере.

Поскольку я люблю экономить текстовые файлы с UTF-8, приведенном ниже примере используется третий метод, но вы также можете решить отказаться от некоторых обработки ошибок. (NB - этот пример основан на script published by Andrew Urquhart)

К счастью, боковая панель имеет возможность использовать knownfolders и knownfolderpaths так найти путь к вашей папке документов, например, это так легко, как

var docs = System.Shell.knownFolderPath("Documents"); 

Помните, что обратная косая черта является escape-символом в javascript, так что пути в строках должны иметь двойную обратную косую черту.

<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
<title>NeverForget</title> 
 
<style type="text/css"> 
 
<!-- 
 
body {margin:0;width:300px;height:200px;background-color:transparent;padding:10px;} 
 
#gadgetContent {width:280px;height:144px;overflow:auto;border:1px solid black;background-color:#eee;} 
 
button {margin-left:66px;margin-top:10px;} 
 
#message {display:none;width:280px;height:180px;position:absolute;top:10px;left:10px;background-color:#eee;border:1px solid red;} 
 
#messageContent {width:278px;height:144px;word-wrap:break-word;overflow-y:auto;} 
 
#newButton {position:absolute;bottom:10px;left:54px;} 
 
--> 
 
</style> 
 
<script type="text/jscript"> 
 
//globals 
 
var myFolderPath=System.Shell.knownFolderPath("Documents")+"\\myFiles"; 
 
//end globals 
 
function showMessage(msg){ 
 
message.style.display="block"; 
 
messageContent.innerText=msg; 
 
} 
 
function closeMessage(){ 
 
message.style.display="none"; 
 
messageContent.innerText=""; 
 
} 
 
function loadFile(strAbsoluteFilePath, strCharSet){ 
 
var adReadAll=-1, adReadLine=-2, strFileContents="", objStream=new ActiveXObject("ADODB.Stream"), fso=new ActiveXObject("Scripting.FileSystemObject"); 
 
try{ 
 
    if(!strAbsoluteFilePath){ 
 
    throw new Error(1, "Required parameter \"strAbsoluteFilePath\" was not defined"); 
 
    } 
 
    if(!strCharSet){ 
 
    throw new Error(2, "Required parameter \"strCharSet\" was not defined"); 
 
    } 
 
    if(!fso.FolderExists(myFolderPath)){ 
 
    throw new Error(3, "Folder \""+myFolderPath+"\" does not exist"); 
 
    } 
 
    objStream.Open(); 
 
    try{ 
 
    objStream.CharSet=strCharSet; 
 
    objStream.LoadFromFile(strAbsoluteFilePath); 
 
    strFileContents=objStream.ReadText(adReadAll); 
 
    gadgetContent.innerText=strFileContents; 
 
    } 
 
    catch(err){ 
 
    throw new Error(err.number, "Loading failed:\r\n" + err.description); 
 
    } 
 
    finally{ 
 
    objStream.Close(); // Always close the stream regardless of what happens 
 
    objStream=null; 
 
    fso=null; 
 
    } 
 
} 
 
catch(err){ 
 
    showMessage("Function loadFile() failed with parameters strAbsoluteFilePath=\"" + strAbsoluteFilePath + "\", strCharSet=\"" + strCharSet + "\". Message=\r\n" + err.description+"\r\nError Number: "+err.number); 
 
} 
 
} 
 
function saveFile(strAbsoluteFilePath, strCharSet, strFileContents, blnOverwrite){ 
 
var adSaveCreateNotExist=1, adSaveCreateOverWrite=2, objStream = new ActiveXObject("ADODB.Stream"), fso=new ActiveXObject("Scripting.FileSystemObject"); 
 
try{ 
 
    if(!strAbsoluteFilePath){ 
 
    throw new Error(1, "Required parameter \"strAbsoluteFilePath\" was not defined"); 
 
    } 
 
    if(!strCharSet){ 
 
    throw new Error(2, "Required parameter \"strCharSet\" was not defined"); 
 
    } 
 
    if(typeof strFileContents != "string"){ 
 
    throw new Error(3, "Required parameter \"strFileContents\" was not a string"); 
 
    } 
 
    if(!fso.FolderExists(myFolderPath)){ 
 
    fso.CreateFolder(myFolderPath); 
 
    } 
 
    objStream.Open(); 
 
    try{ 
 
    objStream.CharSet=strCharSet; 
 
    objStream.WriteText(strFileContents); 
 
    objStream.SaveToFile(strAbsoluteFilePath, (blnOverwrite ? adSaveCreateOverWrite : adSaveCreateNotExist)); 
 
    return true; 
 
    } 
 
    catch(err){ 
 
    throw new Error(err.number, "SaveToFile failed:\r\n" + err.description); 
 
    } 
 
    finally{ 
 
    objStream.Close(); // Always close the stream regardless of what happens 
 
    objStream=null; 
 
    fso=null; 
 
    } 
 
    return false; 
 
} 
 
catch(err){ 
 
    showMessage("Function saveFile() failed with parameters strAbsoluteFilePath=\"" + strAbsoluteFilePath + "\", strCharSet=\"" + strCharSet + "\", strFileContents=\"" + strFileContents + "\", blnOverwrite=\"" + blnOverwrite + "\". Message=\r\n" + err.description+"\r\nError Number: "+err.number); 
 
} 
 
} 
 
function init(){ 
 
loadButton.onclick=function(){loadFile(myFolderPath+"\\myFile.txt","utf-8");}; 
 
saveButton.onclick=function(){saveFile(myFolderPath+"\\myFile.txt", "utf-8", gadgetContent.innerText, true);}; 
 
closeButton.onclick=closeMessage; 
 
} 
 
</script> 
 
</head> 
 
<body onload="init()"> 
 
<textarea id="gadgetContent">Bonjour</textarea> 
 
<div id="message"> 
 
    <div id="messageContent"></div> 
 
    <div id="newButton"><button id="closeButton">Close</button></div> 
 
</div> 
 
<button id="loadButton">Load</button><button id="saveButton">Save</button> 
 
</body> 
 
</html>

+0

WAW Большое спасибо @mystifeid! Это действительно здорово! Последнее: как сделать текстовое поле и тело полностью прозрачным? т.е. мы видим Рабочий стол под текстом и белый/серый фон. – Basj

+0

Попробуйте использовать прозрачный png 1px x 1px как аг: фон (см. Примечания [здесь] (http://msdn.microsoft.com/en-us/library/ff486136.aspx) для того, как объявить в html), затем размер до 100% ширины и высоты (размера тела) в вашей функции onload (т. е. imgBackground.style.width = "100%"; imgBackground.style.height = "100%";) – mystifeid

+0

Черный текст добавлен через html или обычные методы javascript, вероятно, будут иметь пурпурный цвет при использовании прозрачного g: background. Возможно, вы сможете решить эту проблему, добавив/удалив текст в виде [g: текстовые объекты] (http://msdn.microsoft.ком/EN-US/библиотека/ff486146.aspx). Это, кстати, выходит за рамки вашего первоначального вопроса. Пожалуйста, попробуйте выполнить поиск, чтение и провести достойную попытку. Если через несколько дней вы не сможете добиться большего прогресса, задайте другой вопрос и укажите свой css/script/html. – mystifeid

 Смежные вопросы

  • Нет связанных вопросов^_^