2017-11-08 10 views
1

これは簡単な作業だと思っていますが、苦労しています...拡張機能のアイコンをクリックして拡張機能を開くことができます。アイコンを押すとが完全にになります。 ウェブサイトのDOMにiframeを挿入しますが、これは標準のポップアップではありません。今はアイコンがクリックされるたびに隠していますが、新しいページ/タブが読み込まれるたびにiframeが挿入されます。私はiframeを削除しようとしましたが、動作しますが、コンテンツを再挿入するたびに、ウェブサイトを再スクラップして配列に追加するたびにcontent_scriptがトリガーされます。クロムエクステンションを開く/閉じる

マニフェスト:

{ 
    "manifest_version": 2, 
    "name": "Caliban", 
    "description": "Chrome extension that reads text aloud", 
    "version": "1.0", 
    "permissions": [ 
    "tabs", 
    "storage", 
    "<all_urls>", 
    "tts" 
    ], 
    "content_scripts": [ 
    { 
     "matches": [ 
     "<all_urls>" 
     ], 
     "js": [ 
     "js/translations.js", 
     "js/enums.js", 
     "js/element-wrapper.js", 
     "js/content_script.js" 
     ], 
     "css": [ 
     "css/parent.css" 
     ] 
    } 
    ], 
    "background": { 
    "scripts": [ 
     "js/translations.js", 
     "js/enums.js", 
     "js/element-wrapper.js", 
     "js/background.js" 
    ] 
    }, 
    "browser_action": { 
    "default_icon": "img/icon.png", 
    "default_title": "Caliban" 
    }, 
    "web_accessible_resources": [ 
    "css/*.css", 
    "images/*.png", 
    "images/*.svg", 
    "popup.html" 
    ] 
} 

content_script.js:

function createIFrame() 
{ 
    iframe.style.position = "fixed"; 
    iframe.style.height = "300px"; 
    iframe.style.top = "0px"; 
    iframe.style.right = "0px"; 
    iframe.style.zIndex = "9000000000000000000"; 
    iframe.frameBorder = "1"; //temporary, so we can see the bounds while developing. 
    iframe.overflow = "hidden"; 
    iframe.id = "CalibanMainUI"; 
    iframe.src = chrome.extension.getURL("popup.html"); 

    body.appendChild(iframe); 
} 

この関数はcontent_script.jsの開始時に呼び出されます。また、content_scriptでは、以下の関数を使用して非表示/表示しますが、iframeを作成/削除する前に使用されていました。私が探している何

function toggleIFrame() { 
    if (isFrameOpen === true) 
    { 
     iframe.style.display = "none"; 
     isFrameOpen = false; 
    } 
    else 
    { 
     iframe.style.display = "initial"; 
     isFrameOpen = true; 
    } 

は次のとおりです。

  1. オープン:ユーザ制御、新しいものではないタブコントロール。 iframeを作成して挿入し、ウェブサイトをスクラップします。
  2. 閉じる:iframeを削除し、スクリプトをアンロードし、変数を解放します。

このようなことは定型文に存在しますか?あるいは、これらの標準的な要件を手動でコード化する必要がありますか?

必要に応じてより多くのコードを提供していただきます。

+1

代わりのマニフェスト '" content_scriptsを介してコンテンツスクリプトを注入するも、それらを無効にするロジックを実装することができますこの方法では、 "キーを押し、' chrome.browserAction.onClicked'に応答して、バックグラウンドページの 'chrome.tabs.executeScript'を通して手動でそれらを挿入します。このように注入するタイミングを制御し、注入されている場合にそれらを無効にするロジックを実装することもできます。 –

+0

論理的に見えますが、私はそれを渦巻きで返します。 –

+0

ここでは、主に権限についていくつかのエラーがありましたが、これは確かに私が探していたものです。あなたは答えを出すことができ、私はそれを受け入れます。 –

答えて

1

マニフェスト"content_scripts"キーを使用してコンテンツスクリプトを注入する代わりに、chrome.browserAction.onClickedに応答して、バックグラウンドページで手動でchrome.tabs.executeScriptに注入します。

あなたがそれらを注入する際に制御し、彼らはすでに読者の練習として残し(注入した場合:)

関連する問題