注入的javascript并不总是有效的

注入的javascript并不总是有效的,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在尝试为twitter开发一个chrome扩展。我遇到了这个问题,尝试了所有我能在网上找到的东西,但仍然没有解决问题 下面是详细的解释 我使用用户content_脚本注入自己的js代码来操作twitter网页上的div 源代码如下所示: manifest.json "content_scripts": [ { "js": [ "jquery.js", "code.js" ], "matches": [ "http://*.twitter.com/*", "ht

我正在尝试为twitter开发一个chrome扩展。我遇到了这个问题,尝试了所有我能在网上找到的东西,但仍然没有解决问题

下面是详细的解释

我使用用户content_脚本注入自己的js代码来操作twitter网页上的div

源代码如下所示:

manifest.json

   "content_scripts": [ { 
      "js": [ "jquery.js", "code.js" ],
      "matches": [ "http://*.twitter.com/*", "https://*.twitter.com/*" ]
   } ],
code.js

function JSCode()
{  
/* my own jquery code here */
}

$(document).ready(function() {
var node = document.createElement('script');
var toInject = "("+JSCode.toString()+")();";

node.innerText = toInject ;
document.querySelector('body').appendChild(node);
});
我调试twitter页面的源代码

<script>/*my own jquery code here */</script>
</body>
/*这里是我自己的jquery代码*/
始终位于主体标记的底部

如果我只是在chrome地址栏中键入twitter.com或twitter.com/user_name,点击即可,javascript工作正常

如果我已经在twitter.com网页上(js代码在第一次加载网页时起作用),我单击我自己的个人资料链接并重定向到我自己的twitter页面,该页面将位于同一个chrome网页中,javascript似乎没有被执行(尽管js代码仍然附加在正文底部),只有重新加载整个网页才能使javascript再次工作


关于为什么会这样以及我如何解决这个问题,有什么建议吗?谢谢

点击Ctrl+Shift+j-这将打开控制台并显示所有脚本错误。你应该可以很容易地缩小范围。(或转到右上角工具-->JavaScript控制台中的chrome 3栏菜单)

如果您使用的是jQuery,那么不妨这样做

$(document).ready(function() {
    $('body').append($('<script>').html('('+JSCode.toString()+')();'));
});

如果它不起作用,您可能必须将其更改为$('body').append($($('').html('('+JSCode.toString()+')();'));但是idk。。。让我们知道…谢谢你JxAxMxIxN当页面第一次加载时,我的方法和你的方法都有效。问题是,比方说,当我单击我的用户配置文件并重定向我的配置文件页面时,注入的javascript仍然附加在body标记的底部(这是预期的),但代码似乎没有执行。。如果转到javascript控制台并进行检查,则不会出现错误。我怀疑这与chrome事件监听器有关(例如,当创建新选项卡或单击“重新加载”时,js代码会工作),但当重定向到相同的web链接与twitter匹配时,它不会生效。com你为什么要尝试插入此代码?代码是通过Ajax还是其他方式提供给您的?如果您使用的是chrome脚本,那么您应该可以自由运行并访问所有您想要的内容,而无需注入任何内容。。。对于无限制的web资源访问权限-添加“web可访问的资源”:[“*”],并在脚本manifest.json文件的权限部分添加“http://*/*”、“https://*/*”。这是我刚刚上传的文件。若您下载并加载它作为未打包的扩展,然后使用chrome,您会注意到每个twitter帐户的用户名都变成红色。现在,点击左上角你们自己的个人资料,chrome会将你们重定向到,你们会注意到这一次,tweet账户用户名并没有变成红色。但如果您只需右键单击并重新加载页面,用户名将再次变为红色。如果您对此有任何想法,请让我知道,将其放在您的JSCode()函数中,而不是$('head')。append($('.fullname{color:red;border:2px dottered green;}');它稍微澄清了这个问题。。。更多信息…当你点击你的个人资料链接时,地址栏中的地址会改变吗?如果aeverything是动态加载的(比如通过AJAX),那么代码将不会再次执行。因此,您必须找到其他方法。(如果我们知道您的JSCode的功能,它可能会帮助我们想出一些东西。)谢谢@ExpertSystem
这是我刚刚上传的一篇文章
如果您下载并加载它作为未打包的扩展,然后使用chrome,您会注意到每个twitter帐户的用户名都变成红色。现在,点击左上角你们自己的个人资料,chrome会将你们重定向到,你们会注意到这一次,tweet账户用户名并没有变成红色。但是,如果您只需右键单击并重新加载页面,用户名将再次变为红色。对不起,我自己没有twitter帐户来检查它:/一些备注:1。似乎您可以从清单中删除
“背景”
。2.您不需要在
code.js
$(document.ready)(function(){JSCode();})中创建伏都教内容就足够了。3.可能是您没有获得
document.ready
事件,因为默认情况下,您的脚本是在“document\u idle”处注入的。尝试在“document_start”(文档开始)注入,看看会发生什么。(然而,正如我在第一篇评论中已经说过的,这可能是因为内容的动态加载——拥有twitter帐户的人可以查看它。或者,你可以在控制台中观看
网络
选项卡,看看通过单击配置文件名会产生何种流量。)感谢@ExpertSystem回复您的评论:1。是的,这个演示2不需要。是的,的确,JSCode()足够了。我在content_脚本中添加了
run_at
document_start
,它的行为仍然与以前相同。是的,我同意你的观点,它可能与动态加载有关,我仍在试图弄清楚为什么会发生这种情况
$('head').append($('<style>.fullname { color: red; border: 2px dotted green; }</style>')); 
$(".fullname").css({color:"red", border:"2px dotted green"});