相关疑难解决方法(0)

使用内容脚本将代码插入页面上下文

我正在学习如何创建Chrome扩展程序.我刚开始开发一个来捕捉YouTube活动.我想将它与YouTube Flash播放器一起使用(稍后我将尝试使其与HTML5兼容).

manifest.json的:

{
    "name": "MyExtension",
    "version": "1.0",
    "description": "Gotta catch Youtube events!",
    "permissions": ["tabs", "http://*/*"],
    "content_scripts" : [{
        "matches" : [ "www.youtube.com/*"],
        "js" : ["myScript.js"]
    }]
}
Run Code Online (Sandbox Code Playgroud)

myScript.js:

function state() { console.log("State Changed!"); }
var player = document.getElementById("movie_player");
player.addEventListener("onStateChange", "state");
console.log("Started!");
Run Code Online (Sandbox Code Playgroud)

问题是控制台给了我"开始!" ,但没有"状态改变!" 当我播放/暂停YouTube视频时.

将此代码放入控制台时,它可以正常工作.我究竟做错了什么?

javascript google-chrome youtube-api google-chrome-extension content-script

452
推荐指数
5
解决办法
24万
查看次数

可以通过WebKit,FireBug或IE8 Developer Tool等调试器来调试动态加载JavaScript吗?

我最近的问题,我已经创建了一些用于动态加载局部视图的JavaScript函数.所以,我无法调试任何动态加载JavaScript.因为所有加载的JavaScript都将通过"eval"函数进行评估.

但是,我找到了一些方法来创建新的JavaScript,使用以下脚本动态创建脚本到当前文档的标题.所有加载的脚本都将显示在HTML DOM中(您可以使用任何调试器来查找它).

var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.text = "alert('Test!');";

document.getElementsByTagName('head')[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)

顺便说一下,大多数调试器(IE8 Developer Toolbar,Firebug和Google Chrome)都无法在任何动态脚本中设置断点.因为必须在加载页面后第一次加载可调试脚本.

您是否有动态脚本内容或文件调试的想法?

更新1 - 添加测试源代码

您可以使用以下xhtml文件来尝试调试someVariable值.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>    
    <title>Dynamic Loading Script Testing</title>
    <script type="text/javascript">
    function page_load()
    {       
        var script = document.createElement('script')
        script.setAttribute("id", "dynamicLoadingScript");
        script.setAttribute("type","text/javascript");
        script.text =   "var someVariable = 0;\n" +
                        "someVariable = window.outerWidth;\n" +
                        "alert(someVariable);";

        document.getElementsByTagName('head')[0].appendChild(script);
    }
    </script>
</head>
<body onload="page_load();">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

从答案来看,我只是在FireBug中测试它.结果应显示如下图像.

alt text http://d7cgnq.bay.livefilestore.com/y1pJGV27qEARXzZhsMMhPD5z0OxAtnkQK8eKeEXMAxuHjsuWeAq1aGl7sTISRNqVv3lw8ghyxE_GorlwSJDvTql0m0ugSGXPaY-/undebugable-firebug-html.PNG

请查看页面加载后添加的"dynamicLoadingScript"脚本.

alt text http://d7cgnq.bay.livefilestore.com/y1pz_RwqjgeVqe2mAlUZha0PalpPdP0X5AiwJcQhYahERlnbPDdZpb-_d1e96Q-14raSDMJOBsdcV9jsi4B5yCUDqm41Wc3h0yk/undebugable-firebug-script.PNG

但是在FireBug的脚本选项卡中找不到它

更新2 …

javascript ajax

88
推荐指数
6
解决办法
5万
查看次数

Chrome控制台:VM

在Chrome中直接在控制台中执行脚本时,我看到了:

在此输入图像描述

有谁知道VM117:2的含义是什么

VM代表什么?

google-chrome google-chrome-devtools

40
推荐指数
1
解决办法
2万
查看次数

动态加载的JavaScript不会在源面板中显示?

例如,我有一个ajax请求,它返回<script src='buggy.js'></script>.

问题是,它没有出现在源或资源面板中.这意味着我不能做所有很酷的事情,比如添加断点并在运行时检查元素.

我只能在"网络"面板下看到js文件的来源.

反正是否有铬将它们添加到源面板?
或者你们如何调试动态添加的脚本?

使用金丝雀.

google-chrome-devtools

9
推荐指数
1
解决办法
3983
查看次数

为什么Apple会在我的Web应用程序中加载匿名脚本?

我在使用开发人员工具浏览我的网站时发现了这一点.它是为了什么?这是Safari的一部分,如果是这样的话,为什么它不是硝基引擎的一部分.

它只显示为匿名脚本.

/*
 * Copyright (C) 2007 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1.  Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 * 2.  Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer …
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
1
解决办法
1359
查看次数

Chrome VM文件重复javascript

我在开发网站时遇到了问题.我正在使用chrome来调试javascript函数.在我的一个页面上,我看到以下内容:

问题的截图

您可以看到我自己的javascript文件被执行,search.js.该文件有一个副本,名为VM1769.此文件也执行相同的代码,因此搜索请求将发送两次.

我四处搜索,看到有人通过禁用缓存来解决这个问题(当DevTools打开时),但这对我不起作用.我尝试了另一个版本的Chrome,问题仍然存在.

有没有人有办法解决吗?

javascript google-chrome duplicates

5
推荐指数
2
解决办法
1491
查看次数

javascript调试进入VM ****文件如何对这些文件进行黑名单处理?

当使用chrome开发工具调试JS时,同时使用进入下一个功能(ctrl +;)。我正在输入像VM ****这样的文件名。有办法摆脱这种情况吗?

javascript debugging script-debugging google-chrome-devtools

5
推荐指数
1
解决办法
2996
查看次数

Chrome开发工具网络标签中的启动器列中的VM前缀是什么?

在Chrome开发者工具的“网络”标签的“启动器”列中,有时脚本中有一个以VM为前缀的启动器。

我最初的想法是,它代表虚拟机,但是数字代表什么呢?

如果单击查看源,仍然不清楚该脚本的来源是什么?

Chrome的网络工具截图

performance-testing google-chrome-devtools web-performance

5
推荐指数
1
解决办法
2287
查看次数

Javascript文件在Ajax导航中显示为重复

我在AJAX导航时遇到问题,问题是加载的javascript文件即使在新内容加载后仍保留在浏览器中,即使它们DOM不再存在,它们也以VM文件形式显示在浏览器控制台中并在其中执行代码。我不希望发生这种情况,因为当新内容通过时应该替换的javascript文件AJAX

我的DOM结构如下:

<body>
    <header></header>

    <main id="contentToBeReplaced">

        <p>New content with its own js</p>
        <script>
            var script = "js/new.js";
            $.getScript(script);
        </script>
    </main>

    <footer></footer>

    <script src="js/main.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)

每当页面加载有其自己的javascript文件时,就会出现一个新VM文件并保留所有旧文件,这就是一个问题:
在此处输入图片说明

那么,问题出在哪里,我该如何解决呢?我需要防止重复文件,并在加载新的js文件时将其删除。

javascript browser ajax jquery duplicates

5
推荐指数
1
解决办法
370
查看次数