0

私はSelenium IDE(ブラウザ拡張機能)と同様のことをしようとしています。Chrome拡張機能新しいウィンドウを開き、アクティブなタブから情報を送信する方法

1新しいウィンドウが開き、アクティブタブから

2つの録音行為をし、私の新しいウィンドウ

に送信しかし、私はエラー

を受けていますので、私は何か間違ったことをやってる: 私はしたいと思います
Unchecked runtime.lastError while running tabs.executeScript: Cannot access contents of url "chrome-extension://djnljameancbknhjdldffnejafgfkamf/dialog.html". Extension manifest must request permission to access this host. 
    at chrome-extension://djnljameancbknhjdldffnejafgfkamf/background.js:35:21 

manifest.jsonを

{ 
    "name": "Dialog tester", 
    "version": "1.0", 
    "manifest_version": 2, 
    "background": { 
    "scripts": [ 
     "background.js" 
    ], 
    "persistent": false 
    }, 
    "content_scripts": [ 
    { 
     "matches": [ 
     "<all_urls>" 
     ], 
     "js": [ 
     "open-dialog.js" 
     ] 
    } 
    ], 
    "permissions": [ 
    "tabs", 
    "<all_urls>" 
    ], 
    "web_accessible_resources": [ 
    "dialog.html", 
    "style.css" 
    ] 
} 

background.js

// Handle requests for passwords 

var createdWindow; 

chrome.runtime.onMessage.addListener(function(request) { 
    if (request.type === 'request_password') { 
     chrome.tabs.create({ 
      url: chrome.extension.getURL('dialog.html'), 
      active: false 
     }, function(tab) { 
      // After the tab has been created, open a window to inject the tab 
      chrome.windows.create({ 
       tabId: tab.id, 
       type: 'popup', 
       focused: true 
       // incognito, top, left, ... 
      }, function (window) { 
       console.log(window); 
       // Trace tab id which is created with this query 
       createdWindow = window.tabs[0].id 
      }); 
     }); 
     document.writeln("fsfs"); 
    } 
}); 
function setPassword(password) { 
    // Do something, eg..: 
    console.log(password); 
}; 

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
    // Inject script into chosen tab after it is loaded completely 
    if (tabId == createdWindow && changeInfo.status == "complete") { 
     // Inject Jquery and in current tab 
     chrome.tabs.executeScript(tabId, { 
      "file": "jquery.js" 
     }, function() { 
      // I am in call back 
      console.log("Injected some jquery "); 
     }); 
    } 
}); 

dialog.html

<!DOCTYPE html><html><head><title>Dialog test</title></head><body> 
<form> 
    <input id="pass" type="password"> 
    <input type="submit" value="OK"> 
</form> 
<script src="dialog.js"></script> 
</body></html> 

dialog.js

document.forms[0].onsubmit = function(e) { 
    e.preventDefault(); // Prevent submission 
    var password = document.getElementById('pass').value; 
    chrome.runtime.getBackgroundPage(function(bgWindow) { 
     bgWindow.setPassword(password); 
     window.close();  // Close dialog 
    }); 
}; 

オープンdialog.js

if (confirm('Open dialog for testing?')) 
    chrome.runtime.sendMessage({type:'request_password'}); 

何が間違っていますか?

答えて

0

chrome-extension://スキームを持つ拡張ページにコンテンツスクリプトを挿入することはできません。 popupタイプあなたはそのすべてを行う必要はありませんし、ウィンドウを作成するために、また

<script src="jquery.js"></script> 

:単にあなたの内部ページ(dialog.html)でスクリプトを参照します。 Create直接:

chrome.runtime.onMessage.addListener(function(request) { 
    if (request.type === 'request_password') { 
     chrome.windows.create({ 
      url: '/dialog.html', 
      type: 'popup', width: 400, height: 400, 
     }); 
    } 
}); 
+0

ありがとうございます。しかし、chrome-extension:// schemファイルにスクリプトを挿入できない場合、どのようにポップアップの内容を変更できるかは、アクティブなタブのユーザーアクションに依存しますか?これが可能だと思いますか? –

+0

条件を使用したり、HTMLの一部を表示/非表示にすることができます。または、chrome.browserAction.setPopupを使用します。 – wOxxOm

+0

しかし、この方法では、私は彼がアクティブなタブで行ったすべてのユーザーアクションをポップアップでログインできないことがわかりますか?例えば、私はポップアップにログインしたいと思います。ユーザ名Xのリンクをクリックし、名前Yのユーザボタンをクリックします。 –

関連する問題