0

新しいタブと新しいウェブサイトをクロームで追加して開きます。前のタブのURLを新しいURLにコピーする必要がありますが、動作させることができません。クロムエクステンションで前のタブから変数を取得

これを行う最善の方法は何ですか?私はクリップボードを使用して探していたが、javascriptでは動作しません。変数を新しいタブに渡すにはどうすればよいですか?

EDIT 1

popup.html

<html> 
    <head> 
    <title>Youtube Downloader</title> 
    <link rel="stylesheet" href="css/style.css"> 
    <script src="scripts/background.js"></script> 
    </head> 
    <body> 
    <input id="download_button" type="button" value="Download MP3"/> 
    <br> 
    <span id="validation_span"></span> 
    </body> 
</html> 

MANIFEST

{ 
    "manifest_version": 2, 
    "name":"Youtube Downloader", 
    "description":"Voor het downloaden van de Youtube muziek", 
    "version": "1", 
    "browser_action": { 
     "default_icon": "icon.png",  
     "default_popup": "popup.html" 
    }, 
    "permissions": [ 
     "tabs" 
     ,"http://www.youtube-mp3.org/*" 
    ], 
    "content_scripts" : [{ 
     "matches" : [ "http://www.youtube-mp3.org/*"] 
     ,"js" : ["scripts/youtube-mp3.js"] 
    }] 
} 

Background.js

addEventListener("load", init, false); 


//GLOBAL VARIABLES 
var succes = 0; 
var validation_span; 
var button; 

function init(event) { 
    button = document.getElementById("download_button"); 
    button.addEventListener("click", getUrl, false);  
} 

function getUrl(event){ 
    chrome.tabs.getSelected(null, function(tab){ 
     maakLayout(event, tab.url); 
    }); 
} 

function maakLayout(event, url) { 
    //Layout van de nieuwe View 
    validation_span = document.getElementById("validation_span"); 
    var body = document.getElementsByTagName("body")[0]; 
    body.style.width = "300px"; 
    var br = document.getElementsByTagName("br")[0]; 
    br.remove(); 
    button.remove(); 

    var result = urlValidation(url); 

    if(succes == 1){ 
     validation_span.style.color = "green"; 
     result = url; 
     chrome.tabs.create({"url": "http://www.youtube-mp3.org/nl"}, function(newTab){ 
     }); 
    } 
    if (succes == 0){ 
     validation_span.style.color = "red"; 
    } 
    validation_span.innerHTML = result; 
} 

function urlValidation(url){ 
    if(url.indexOf('www.youtube.com/watch?v=') >= 0){ 
     succes = 1; 
     return "Url is OK"; 
    }else{ 
     succes = 0; 
     return "Only Youtube links allowed"; 
    } 
} 

youtub-mp3。 JS

chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) { 
    alert("Binne"); 
    if (msg.action == 'url') { 
     alert("Message recieved!"); 
     var copy = msg; 
     var inputfield = document.getElementById("youtube-url"); 
     inputfield.value = copy; 
    } 
}); 
+0

あなたがこれまで持っているコードを共有することはできますか? – dan

+0

チェックEDIT 1これは私のアプリケーション全体 –

+0

前のタブを言っているとき、左のタブか前のセッション/履歴を意味しますか? –

答えて

0

EDIT

コンテンツスクリプトがonMessageのリスナーを登録しているされる前に、メッセージが送信されますので、私のオリジナルの答えは動作しません。あなたはその後、ユーチューブ-mp3.jsを削除することができるはず

chrome.tabs.create({"url": "http://www.youtube-mp3.org/nl"}, function(newTab) { 

    var script = "var inputfield = document.getElementById(\"youtube-url\"); inputfield.value = \"" + url + "\""; 
    chrome.tabs.executeScript(newTab.id, { code: script }); 

}); 

は、しかし私はそれが chrome.tabs.executeScriptを使用して動作させることができました。


あなたが正しくしようとしていることを理解していれば、コードを少し変更するだけで済みます。 background.jsで

// your existing code 
chrome.tabs.create({"url": "http://www.youtube-mp3.org/nl"}, function(newTab){ 
    // additional code 
    chrome.tabs.sendMessage(newTab.id, {action: 'newUrl', url: url});  
}); 

ユーチューブ-mp3.js:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.action == "newUrl") 
     // Do whatever you want to do with the url 
     console.log(request.url); 
    }); 
+0

これはうまくいきません。なぜなら、background.jsがpopup.htmlで呼び出され、マニフェストファイルで指定されていないからでしょうか? –

+0

それは私自身のコードをテストするよう教えてくれるでしょう! :)私は自分の答えを更新しました。 – dan

+0

nowpはまだ動作しません。アラート(「テスト」)を設定すると関数内のコードが機能しないと思います。その機能は実行されていませんか?これはどのように可能ですか? –

関連する問題