Использование JavaScript для ввода с одной HTML-страницы и вывода на другую HTML-страницу

#javascript #html

Вопрос:

У меня есть HTML-страница с кнопкой «сохранить соль и связанную вкладку», которая сохранит URL-адрес текущей вкладки и соль в двух переменных, а затем добавит эти значения в таблицу на совершенно другой HTML-странице. Однако связанный файл JavaScript не может прочитать таблицу с последней HTML-страницы, к которой добавляются переменные. Есть ли какой-нибудь способ сделать это? Первый HTML:

 
<html>
<h1>Set the number of characters</h1>
    <input id="num"  type = "number" value = "20" name = "value"><br><br>
    
    
<div class="spec_symb"><label><input  id = "spec_symb" name=unit  type=radio value=special>Special symbols</label></div>
<div class="alphanumeric"><label><input checked id = "alpanumeric" name=unit type=radio value=alpahnumeric>Alphanumeric symbols only</label></div>
<br>
<button id="click">Generate</button><br>
    <p id="text" ></p>
    
    
<button id="save">Save the salt with the associated tab opened</button>
<p id="string" ></p>
<p id="url" ></p>
<ul>
  
        <li><a href=navigation.html>Back to the Navigation Menu</a></li>
       
      </ul>

    
    
    <script src="salt_genj.js"></script>
    
    
   
    </html>

 

Код JavaScript (salt_gen.js):

 function saltgen(length) {
    var radio = document.getElementById("spec_symb");
    var salt = "";
    if(document.getElementById('spec_symb').checked == true){
        var symbols = symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^amp;*()_"}
    else{var symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";}
    
 var slength = symbols.length;
    for ( var i = 0; i < length; i   ) {
       salt = salt   symbols.charAt(Math.floor(Math.random() * slength));
    }
    return sa<}
document.getElementById("click").onclick = function(){myFunction()};
 function myFunction(){
     document.getElementById("text").innerHTML = saltgen(document.getElementById("num").value);
 }
 
 document.getElementById("save").onclick = function(){anotherFunction()};
 function anotherFunction(){
     
    var salt = document.getElementById("text").innerHTML ;
    var table = document.getElementById("MyTable");
    var row = table.insertRow(1);
    var cell1 = row.insertCell(0);
    var cell2 = row.insertCell(1);
    cell1.innerHTML = url; 
    cell2.innerHTML = sa<
    chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function 
    (tabs) {
        url = tabs[0].url;
        
        
    
    });
     

     
    
     return sa<
     
     
 }
 

Последняя HTML-страница с таблицей

 <!DOCTYPE html>
<html lang="en">
<table id="MyTable" class="table table-striped" style="width:100%">
        <tr>
          <th>Webstite</th>
          <th>Salt</th> 
          
        </tr>
        
      </table>
      
      <script src="salt_genj.js"></script>
      
    
</html>
 

Комментарии:

1. Можно было бы передать их в строке запроса URL-адреса или сохранить в хранилище

2. Перейти на другую HTML-страницу? У вас есть доступ к CORS?

3. @StackSlave Я не знаю, что такое CORS, но мой код предназначен для работы в качестве расширения Chrome

4. developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

5. @charlietfl Я попробовал локальное хранилище через localStorage.setItem("vOneLocalStorage", url); localStorage.setItem("vTwoLocalStorage", salt); на своей первой странице JavaScript, затем var urla = localStorage.getItem("vOneLocalStorage "); var salta = localStorage.getItem("vTwoLocalStorage "); , но переменные просто оказались пустыми

Ответ №1:

Вы сказали, что хотите использовать его в качестве расширения Chrome. Расширение браузера имеет background.js скрипт, он запускается всякий раз, когда запускается ваше расширение, и может подключаться между несколькими страницами.

Вы также можете использовать файлы cookie или API хранения.

Комментарии:

1. Вы имеете в виду, что я должен поместить свой код JavaScript внутрь background.js?

2. В расширениях браузера есть такая вещь, как обмен сообщениями. Вы можете отправлять сообщения между различными сценариями расширения. Причина, по которой это делается, заключается в том, что разные сценарии имеют разные разрешения. Например, в content.js сценарии могут редактировать веб-страницу, с которой она совпадает, когда background.js сценарий не может. Однако фоновый сценарий выполняется постоянно и может взаимодействовать с различными вкладками. Вы можете использовать сообщения для отправки данных из сценария содержимого в фоновый сценарий. Когда вы перейдете на другую страницу, вы можете запросить у фонового сценария ответное сообщение.

3. Как я понимаю, вы предлагаете передать переменные из salt_gen.js на задний план. js, а затем каким-то образом заполните таблицу, используя background.js. Как бы вы передали переменную из одного js-скрипта в другой?

4. В документах API Google действительно сложно ориентироваться. Я рекомендую прочитать версию Firefox. Это почти то же самое developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/…