我正在构建一个chrome扩展程序,它会打开一个jquery对话框并询问用户当前的网站。
这是我到目前为止所做的事情
background.html
<html>
<head>
<script>
var tabUrl='';
chrome.browserAction.onClicked.addListener(function(tab) {
tabUrl=tab.url; //this varible i want to pass to popup.js
chrome.tabs.executeScript(null,
{file:"jquery-ui.css",
runAt:"document_start"},
function() { });
chrome.tabs.executeScript(null,
{file:"jquery.js",
runAt:"document_start"},
function () {
chrome.tabs.executeScript(null,
{file:"jquery-ui.min.js"},
function () {
chrome.tabs.executeScript(null, {file:"popup.js"}, function() {
});
});
});
});
</script>
<script ></script>
</head>
</html>
popup.js
$(function() {
var myurl='http://localhost/addReview.php?url='+tabUrl;
var NewDialog = $('<div id="MenuDialog" ><iframe id="loader" frameborder="0" style="height:400px;width:100%" src="'+myurl+'"></iframe></div>');
NewDialog.dialog({
modal: true,
title: "Curate to WishCart",
show: 'clip',
hide: 'clip',
width: '744'
});
});
我试着用另一种方式将我的popup.js代码复制到background.html,然后扩展控制台显示以下错误。
未定义的符号$
未捕获TypeError:对象[object Object]没有方法'对话'
我想将tabUrl传递给popup.js,这样我就可以加载i-frame并使用iframe src属性发送当前标签页。
答案 0 :(得分:0)
传递给chrome.tabs.executeScript
方法的脚本将作为Content Script执行。这意味着,它将无法访问后台页面的上下文和其中定义的变量。
我不确定,但根据文档,您可以尝试使用以下方法:
chrome.tabs.executeScript(null,
{
file: "popup.js",
code:"showDialog(" + tabUrl + ")"
});
注意:根据上面的示例,showDialog
函数必须在 popup.js 文件中定义为全局函数。