2016-03-24 2 views
0

Я хочу создать DIV, содержащий сообщение, если пользователь посещает URL-адрес, хранящийся в моей базе данных. На самом деле, он работает в предупреждающем сообщении, но я хочу DIV, поэтому мне нужно получить доступ к DOM страницы по содержимомуcript.js, и это работает, но как я могу предотвратить работу функции в файле contentscript.js, потому что я хочу, чтобы функция работала после того, как я проверил URL-адрес в background.js!Расширение Chrome: вызов функции в содержанииcript.js из background.js

Я читал о вкладке, но он запускается только тогда, когда пользователь нажимает значок действия браузера, и в моей ситуации пользователь не нажимал значок, который он просматривал только на www.

contentscript.js

chrome.runtime.sendMessage(window.location.href); 
var pathname = window.location.pathname; // Returns path only 
var url  = window.location.href; 
//document.getElementsByTagName('title')[0].innerText 

function MessageBox(){ 
    document.documentElement.style.height = '100%'; 
    document.body.style.height = '100%'; 
    document.documentElement.style.width = '100%'; 
    document.body.style.width = '100%'; 

    var div = document.createElement('div'); 
    var btnForm = document.createElement('form'); 
    var btn = document.createElement('input'); 

    //append all elements 
    document.body.appendChild(div); 
    div.appendChild(btnForm); 
    btnForm.appendChild(btn); 
    //set attributes for div 
    div.id = 'myDivId'; 
    div.style.position = 'fixed'; 
    div.style.top = '80%'; 
    div.style.left = '77%'; 
    div.style.width = '22%'; 
    div.style.height = '17%'; 
    div.style.backgroundColor = 'white'; 
    div.style.border='1px solid red'; 

    //set attributes for btnForm 
    btnForm.action = ''; 

    //set attributes for btn 
    //"btn.removeAttribute('style'); 
    btn.type = 'button'; 
    btn.value = 'X'; 
    btn.style.position = 'reltive'; 
    btn.style.top = '10%'; 
    btn.style.left = '80%'; 
    btn.style.width = '5%'; 
    btn.style.height = '3%'; 
} 

background.js

chrome.runtime.onMessage.addListener(function(response, sender, sendResponse) { 

    $.ajax({ 
     type: 'GET', 
     url: 'http://mywebsite.com/api/route', 
     dataType: 'json', 
    }).success(function(results) { 
     for (var i = 0; i < results.length; i++) { 
      if (results[i].url === response) { 
       alert("This page in my database"); // this work but I don't want an alert message 
      } //if 
     } //for 
    }); 
}); 

ответ

0

chrome.runtime.sendMessage асинхронный метод. Вы можете передать его метод обратного вызова и в фоновом режиме сценария вызова sendResponse, когда заканчивает свою работу

В вашем фоне сценария:

chrome.runtime.onMessage.addListener(function(response, sender, sendResponse) { 

    $.ajax({ 
     type: 'GET', 
     url: 'http://mywebsite.com/api/route', 
     dataType: 'json', 
    }).success(function(results) { 
     for (var i = 0; i < results.length; i++) { 
      if (results[i].url === response) { 
       sendResponse(true); 
       return; 
      } 
     } 

     sendResponse(false); 
    }); 

    return true; // tell chrome about runnning async job 
}); 

И в сценарии содержимого этого

chrome.runtime.sendMessage(window.location.href, function(result) { 
    if (result) { 
     // Found 
     MessageBox(); 
    } 
}); 

Подробнее о сообщение, переданное здесь https://developer.chrome.com/extensions/messaging

+0

Большое спасибо, что это работа – Seham

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