点击Chrome扩展程序中的popup.html图标运行javascript

时间:2012-11-02 10:36:33

标签: javascript google-chrome-extension

我想要的很简单。用户单击扩展的图标并执行JS代码,显示询问两个值的提示框。但我无法弄清楚如何正确地将JS与popup.html链接起来。到目前为止,只需单击图标,弹出窗口就会打开而不运行JS代码。

popup.html

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

prompt.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)
    };
}

3 个答案:

答案 0 :(得分:6)

您无法在Chrome扩展程序中运行内联处理程序 右键单击您的扩展图标,然后单击“检查弹出窗口”。你会看到以下内容:

  

拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“script-src'self'chrome-extension-resource:”。

您需要从身体中移除onload="promptBox()",然后向prompt.js添加一位聆听者:

function promptBox() {
  // ...
}

document.addEventListener('DOMContentLoaded', function() {
  promptBox();
});

答案 1 :(得分:3)

chrome.browserAction.onClicked.addListener(promptBox);

答案 2 :(得分:1)

对于我想要做的事情(通过插入框架来操纵当前页面),结果发现内容脚本是关键字。

后台脚本侦听扩展图标上的onclick操作,并触发调用promptBox函数的内容脚本。

的manifest.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"});
});

prompt.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());