0

Ich kann keine Daten aus Chrome-Erweiterung Hintergrundskript mit XMLHTTPREQUEST senden, ich habe laufen und wampserver laufen, habe ich auch versucht, externe Links wie Google.XMLHTTPREQUEST Chrome-Erweiterung funktioniert nicht

Was ist zu tun:

User enters a permission defined tab, background script waits for hot key,when pressed a content_script is launched and generates a string, the string is sent back to the background script, then the background script should receive the string and send it to a php file, the php file should print hello, its made simple just to try see where is the problem, later php will have more code.

But its completely not working!

UPDATE

I tried to pack the extension then run it by drag and drop, it doesn't launch php script.

I tried to uninstall chrome, restart and then install it again but with no luck.

I have also allowed --allow-file-access-from-files

UPDATE 2

I am receiving the following error in debug mode:

extensions::sendRequest:41: Uncaught TypeError: Cannot read property 'callback' of undefined{TypeError: Cannot read property 'callback' of undefined

M anifest.json

{ 

    "manifest_version": 2, 
    "name": "Extractor", 
    "version": "1", 


    "description": "Extract from 144", 
    "icons": { "16": "logo16.png", 
      "48": "logo48.png", 
      "128": "logo128.png" }, 


     "page_action": { 
      "default_icon": {      
      "16": "logo16.png",   
      "48": "logo48.png",   
      "128": "logo128.png"    
      }, 
      "default_title": "Extractor"   
     }, 

    "background": { 

    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "content_scripts": [ 
    { 
     "matches" : ["https://www.msn.com/*"], 
     "js" : ["content_script.js"] 
    } 
    ], 
"permissions": [ 
    "tabs", 
    "https://www.msn.com/*", 
    "activeTab", 
    "http://localhost/*" 

    ], 
    "commands": { 
      "toggle-feature": { 
      "suggested_key": { 
       "default": "Ctrl+Shift+1", 
       "windows": "Ctrl+Shift+2" 
      }, 

      "description": "Extract now" 
      } 
     } , 
"web_accessible_resources": ["content_script.js"] 

} 

Background.js

chrome.commands.onCommand.addListener(function(command) { 
if (command === "toggle-feature") { 
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    for(var i = 0; i<tabs.length;i++) { 
      chrome.tabs.executeScript(tabs[i].id, {"file": "content_script.js"}); 
    } 
    }); 
    } 
}); 

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

    var xhttp = new XMLHttpRequest(); 
    xhttp.open("POST", "http://localhost/test/test.php"); 
    xhttp.send(message.url); 

    }); 

content_script.js

var url = 'this is just test' ; 
chrome.runtime.sendMessage({ 'url' : url }); 

test.php

echo "hello"; 

Antwort

0

Sie nur in der Lage XHR Anfrage von Chrome-Erweiterung, damit Sie sich in Ihrem manifest.json in Ihrem Code definiert URL, sollten Sie http://localhost auf Ihre manifest.json

"permissions": [ 
    "tabs", 
    "https://www.msn.com/*", 
    "activeTab", 
    "*://*/*", 
    "http://localhost/" 

    ], 

diese Berechtigung hinzufügen "*://*/*", ist ungültig. Sie müssen ein Protokoll angeben (http oder https)


Mehr Info:

+0

Ich habe Berechtigungen hinzugefügt: 'http: // localhost/*'. (ohne Leerzeichen) – user7403949

+0

hinzugefügt Warnung funktioniert, aber die PHP-Datei nicht os Ich denke, es gibt ein Problem mit xmlhttprequest – user7403949

+0

Hallo, bitte bieten Sie Hilfe als Frage wurde aktualisiert. – user7403949

0

Möglicherweise mögen Sie in Ihrem Code überprüfen, ob es chrome.extension.sendRequest ist die bereits unerwün- schte seit Chrome 33. Bitte verwenden Sie stattdessen runtime.sendMessage.

Darüber hinaus besagt Simple one-time requests, dass, wenn Sie nur eine einzelne Nachricht an einen anderen Teil Ihrer Erweiterung senden müssen (und optional eine Antwort zurück erhalten), sollten Sie die vereinfachte runtime.sendMessage oder tabs.sendMessage verwenden.

Und sieht wie folgt aus einer Anfrage von einem Content-Skript zu senden:

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

auf der Empfängerseite benötigen Sie einen runtime.onMessage Ereignis-Listener einzurichten, um die Nachricht zu verarbeiten.

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
       "from a content script:" + sender.tab.url : 
       "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    }); 

Darüber hinaus wurde festgestellt, dass:

The sendResponse callback is only valid if used synchronously, or if the event handler returns true to indicate that it will respond asynchronously. The sendMessage function's callback will be invoked automatically if no handlers return true or if the sendResponse callback is garbage-collected.

Weitere Informationen darüber, wie Anfragen zu senden und zu Setup-Ereignis-Listener, Sie Message Passing überprüfen möchten.

Verwandte Themen