0

我试图编写一个Chrome扩展,在目标页面上放置一个小脚本,然后针对页面上的项目执行特定操作。作为Chrome扩展程序的新手,我已经开始使用“Hello World”警报。这工作正常,但是我实际上想要做的事情包括对对象使用jQUery。添加jQuery停止执行脚本

虽然我的目标页面已经导入jQuery,但如果我尝试在我的脚本中使用它,我会得到一个异常,即$未定义。但是,如果我自己尝试导入它,即使alert停止工作。

下面是我的代码,任何人都可以指出我要去哪里错了吗?

manifest.json的

{ 
    "manifest_version": 2, 

    "name": "Hello World", 
    "description": "Simple Hello World Extension", 
    "version": "1.0", 

    "content_scripts": [ 
    { 
     "matches": ["http://localhost:46950/"], 
     "run_at": "document_end", 
     "js": ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", "popup.js"] 
    } 
    ] 
} 

popup.js

$(helloWorld()); 

function helloWorld() 
{ 
    alert("Hello World"); 
} 

更新

挖掘到的Chrome://扩展,我意识到,当我尝试使用下面的代码,扩展名不是loade d到Chrome中。如果我尝试再次手动加载它,我会得到以下例外:

无法从“'加载扩展名。无法加载JavaScript内容脚本。

+1

JavaScript函数是一阶,你需要传递的功能jQuery的准备处理程序不调用它。 '$(helloWorld)'和_not_'$(helloWorld())' –

+0

但是,由于'$'未定义,甚至没有达到特定的问题。 –

+0

@BenjaminGruenbaum这似乎并非如此。如果我使用'$(helloWorld);'没有任何反应(在它通常工作的情况下)。如果我添加'$(helloWorld());'它工作正常。 –

回答

1

好吧,我设法找到this答案,这给了我一些线索发生了什么事。

Chrome看起来不会在扩展中的外部资源中加载。因此,当我试图通过谷歌加载jQuery,它不会加载它,并崩溃了整个扩展。

我试图这样做的原因是,以免导致我的多个版本的jquery在我的扩展和目标站点之间发生冲突的问题。但是,答案表明这些流程本质上是孤立运行的,所以它不应该有问题。考虑到这一点,我刚刚手动将jquery添加到我的扩展中,并直接加载它。这似乎工作正常。

manifest.json的

{ 
    "manifest_version": 2, 

    "name": "Hello World", 
    "description": "Simple Hello World Extension", 
    "version": "1.0", 

    "content_scripts": [ 
    { 
     "matches": ["http://localhost:46950/"], 
     "run_at": "document_end", 
     "js": ["jquery-2.0.3.min.js", "popup.js"] 
    }] 
} 
+1

你是对的;因为扩展是沙箱化的(除非您有意将脚本注入到页面中),则不会有任何冲突问题。 –

-2

JQuery期待一个DOM元素,所以它会抛出一个错误。

这听起来像你正在寻找类似的$(document)。就绪(): http://learn.jquery.com/using-jquery-core/document-ready/

+0

用'$(document).ready(helloWorld)替换'$(helloWorld());''似乎没有任何区别 –

+1

'jQuery()'期待dom元素,函数或选择器字符串,但在这种情况下,他没有提供这些。 –

+0

不,问题是他没有正确加载它;扩展无法加载外部资源。 –