0

欲しいものはシンプル。ユーザーが拡張機能のアイコンをクリックすると、JS コードが実行され、2 つの値を求めるプロンプト ボックスが表示されます。しかし、JS を popup.html に正しくリンクする方法がわかりません。これまでのところ、アイコンをクリックすると、JS コードを実行せずにポップアップのみが開きます。

popup.html

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="prompt.js"></script>
    </head>
    <body onload="promptBox()">
    </body>
</html>

プロンプト.js

function promptBox() {
    prompt('Choose File 1',A14nH);
    R1Gh7=prompt('Choose File 2',L3f7);
    if(L3f7&&R1Gh7) {
        Fr4Q='<frameset cols=\'*,*\'>\n<frame src=\''+L3f7+'\'/>';
        Fr4Q+='<frame src=\''+R1Gh7+'\'/>\n';
        Fr4Q+='</frameset>';
        with(document) {
            write(Fr4Q);
            void(close())
        }
    }
    else{
       void(null)
    };
}
4

3 に答える 3

7

Chrome 拡張機能内でインライン ハンドラーを実行することはできません。
拡張機能のアイコンを右クリックし、[Inspect Popup] をクリックします。次のように表示されます。

次のコンテンツ セキュリティ ポリシー ディレクティブに違反しているため、インライン イベント ハンドラの実行を拒否しました: "script-src 'self' chrome-extension-resource:"。

onload="promptBox()"本体から削除し、prompt.js代わりにリスナーを追加する必要があります。

function promptBox() {
  // ...
}

document.addEventListener('DOMContentLoaded', function() {
  promptBox();
});
于 2012-11-02T11:05:13.930 に答える
4
chrome.browserAction.onClicked.addListener(promptBox);
于 2012-11-02T10:56:00.913 に答える
1

私がやりたかったこと (フレームを挿入して現在のページを操作すること) については、コンテンツ スクリプトがキーワードであることがわかりました。

バックグラウンド スクリプトは、拡張アイコンの onclick アクションをリッスンし、promptBox 関数を呼び出すコンテンツ スクリプトをトリガーします。

マニフェスト.json

{
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "permissions": [
        "tabs",
        "http://*/*",
        "https://*/*"
    ],
    "browser_action": {
        "default_title": "Dual View Split Screen", 
        "default_icon": "icon48x48.png"
    }   
}

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "prompt.js"});
});

プロンプト.js

function promptBox() {
    windowLeft = prompt('Please choose your left window:', document.URL);
    windowRight = prompt('Please choose your right window:', document.URL);
    if(windowLeft && windowRight) {
        result='<frameset cols=\'*,*\'>\n<frame src=\''+windowLeft+'\'/>';
        result+='<frame src=\''+windowRight+'\'/>\n';
        result+='</frameset>';
        with(document) {
            write(result);
            void(close())
        }
    }
    else{
       void(null)
    };
};

chrome.extension.onClicked.addListener(promptBox());
于 2012-11-02T17:46:38.397 に答える