我有一个ASP.NET用户控件(.ascx文件).在这个用户控件中我想使用.js文件.
所以我<script src="file.js" type"text/javascript"></script>在页面上加入.
但是,有时我会在已加载此相同脚本的网页中使用此用户控件.
<script />如果页面尚未包含<script />同一脚本的另一个标记,我该如何添加将在页面上呈现的声明?
我在这里使用@Alex的方法使用内置的DOMDocument从HTML文档中删除脚本标记.问题是,如果我有一个带有Javascript内容的脚本标记,然后是另一个链接到外部Javascript源文件的脚本标记,则不会从HTML中删除所有脚本标记.
$result = '
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>
hey
</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
alert("hello");
</script>
</head>
<body>hey</body>
</html>
';
$dom = new DOMDocument();
if($dom->loadHTML($result))
{
$script_tags = $dom->getElementsByTagName('script');
$length = $script_tags->length;
for ($i = 0; $i < $length; $i++) {
if(is_object($script_tags->item($i)->parentNode)) {
$script_tags->item($i)->parentNode->removeChild($script_tags->item($i));
}
}
echo $dom->saveHTML();
}
Run Code Online (Sandbox Code Playgroud)
以上代码输出:
<html>
<head>
<meta charset="utf-8">
<title>hey</title>
<script>
alert("hello");
</script>
</head>
<body>
hey
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
从输出中可以看出,只删除了外部脚本标记.有什么办法可以确保删除所有脚本标记吗?
我正在动态创建脚本标记:
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.charset = 'utf-8';
script.defer = true;
script.async = true;
script.text = 'some my javascript content here';
head.appendChild(script);
script.onload = function () {
// this never get fired..
debugger;
}
Run Code Online (Sandbox Code Playgroud)
如何在其他代码块中执行脚本时收到通知?也许有些事件?
谢谢!
我正在仔细阅读一些消息来源,我看到了这一点
<script type="text/javascript" src="script/jquery/jquery.1.7.1.js">//]]>
</script>
<script type="text/javascript" src="script/swfobject_modified.js">//]]>
</script>
Run Code Online (Sandbox Code Playgroud)
以这种方式列出的头部中有十几个依赖项,//]]>每个脚本标记之后的目的是什么?
代码看起来有点旧,并设置为在compat中模拟IE7:
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
Run Code Online (Sandbox Code Playgroud)
真的很好奇,谢谢.
document.addEventListener('DOMContentLoaded', () => {
});
Run Code Online (Sandbox Code Playgroud)
我读到这个事件侦听器确保对于常规脚本,JS 不会引用尚未加载的节点。内容在DOMContentLoaded 被触发后执行)。
我还读过一个模块在 DOMContentLoaded被触发之前被执行(由于defer它内置的属性)。
我使用的模块似乎不需要DOMContentLoaded监听器。我可以确认DOMContentLoaded他们不需要监听器来正确访问节点吗?
另外,我想不出如何测试这个,所以我在这里问。如果你知道我怎么做,请分享!
好的,愚蠢的问题,我不认为这是可能的,但是,我的.aspx页面顶部有这个标记......
<%--Third Party Libraries, Plugins, Extensions --%>
<script src="Libraries/Raphael/Raphael.js" type="text/javascript"></script>
<script src="AutoComplete/jquery.autocomplete.js" type="text/javascript"></script>
<script src="Libraries/jQuery/1.4.2/jquery.js" type="text/javascript"></script>
<script src="Libraries/jQuery/UI/1.8.4/jquery.ui.core.js" type="text/javascript"></script>
<script src="Libraries/jQuery/UI/1.8.4/jquery.ui.widget.js" type="text/javascript"></script>
<script src="Libraries/jQuery/UI/1.8.4/jquery.ui.mouse.js" type="text/javascript"></script>
<script src="Libraries/jQuery/UI/1.8.4/jquery.ui.draggable.js" type="text/javascript"></script>
<script src="Libraries/jQuery/UI/1.8.4/jquery.ui.droppable.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
如果我可以用这个代替它,那不是很好吗...
<%--Third Party Libraries, Plugins, Extensions --%>
<script src="Libraries/Raphael/Raphael.js" type="text/javascript"></script>
<script src="AutoComplete/jquery.autocomplete.js" type="text/javascript"></script>
<script src="Libraries/jQuery/1.4.2/jquery.js" type="text/javascript"></script>
<script src="Libraries/jQuery/UI/1.8.4/jquery.ui.*.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
即使用*as通配符.
显然,因为这是JS,我可以将所有这些脚本放入一个大脚本并加载,但我真的不喜欢这样做.
还有其他人有整理大量脚本参考的技巧吗?或者我们只是忍受它?
我正在动态添加github gist的脚本.如果我在页面加载之前将其添加到html,脚本将执行.但是如果我在加载后尝试将其添加到页面,它会将脚本添加到页面但不执行它.
以下是我将其添加到页面的方式
HTML
<div id="results"></div>
Run Code Online (Sandbox Code Playgroud)
使用Javascript
$('#results').click(function() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://gist.github.com/1265374.js?file=GetGists.js";
document.getElementById('results').appendChild(script);
console.log('script added');
});
Run Code Online (Sandbox Code Playgroud)
这是现场的例子
有时(不是每次,但通常)当我在本地开发时,在成功下载了数百个JS文件后(看起来我们目前已经下载了1393个脚本),Chrome将从并行下载文件切换到串行下载.
服务器是节点,使用express和模块"serve-static".我正在使用Chrome 43.0.我正在使用节点0.12.2.我正在使用serve-static 1.9.3.这些文件都是使用常规脚本标记来请求的<script src="foobar.js"></script>.我怀疑这是Chrome问题,因为服务器响应不会更改.但浏览器请求也不会改变,只有他们的时间/顺序.
有任何想法吗?

编辑:鉴于此问题似乎是Chrome问题,我已在此处向Chromium提交了错误报告:https://code.google.com/p/chromium/issues/detail? can = 2& q = serial%20script%20downloading &colspec = ID%20Pri%20M%20Week%20ReleaseBlock%的20Cr%20Status%20Owner%20Summary%20OS%20Modified&ID = 500948&感谢= 500948& TS = 1434467876
这是我想要完成的.我有一个使用jQuery对PHP文件进行AJAX调用的表单.PHP文件与数据库交互,然后创建页面内容以作为AJAX响应返回; 即,该页面内容被写入$.ajax呼叫成功函数中的新窗口.作为PHP文件返回的页面内容的一部分,我有一个简单的HTML脚本标记,其中包含一个JavaScript文件.特别:
<script type="text/javascript" src="pageControl.js"></script>
Run Code Online (Sandbox Code Playgroud)
这不是在PHP中回应(虽然我已经尝试过),它只是html.pageControl.js与生成内容的php文件位于同一目录中.
无论我尝试什么,我似乎都无法将pageControl.js文件包含在内,或者在为响应AJAX调用成功而创建的新窗口中工作.我最终得到像"预期的对象"或未定义的变量之类的错误,这让我相信文件没有包含在内.如果我将JavaScript直接复制到PHP文件中,而不是将脚本标记与src一起使用,我可以使它工作.
这里有关于调用文件,php和jQuery AJAX之间的范围解析的东西吗?我将来希望以这种方式包含javascript文件,并希望了解我做错了什么.
再次问好:
我已经解决了这个问题,但仍然没有运气.我将尝试澄清我在做什么,也许这会带来一些想法.我根据要求提供了一些代码,以帮助澄清一些事情.
这是序列:
单击表单按钮由jQuery代码处理,如下所示:
$(document).ready(function() {
$("#runReport").click(function() {
var report = $("#report").val();
var program = $("#program").val();
var session = $("#session").val();
var students = $("#students").val();
var dataString = 'report=' +report+
'&program=' +program+
'&session=' +session+
'&students=' +students;
$.ajax({
type: "POST",
url: "process_report_request.php",
cache: false,
data: dataString,
success: function(pageContent) {
if (pageContent) {
$("#result_msg").addClass("successMsg")
.text("Report created.");
var windowFeatures = "width=800,menubar=yes,scrollbars=1,resizable=1,status=yes";
// open a new report window
var reportWindow = …Run Code Online (Sandbox Code Playgroud)我正在研究从gulp/grunt切换到仅使用npm脚本.但我真的无法解决如何从给定路径获取*.js和*.css并将其添加到index.html文件中.
我必须通过"index.js"文件添加它,还是可以做类似......
"scripts": {
"inject": "inject src/app/*.js",
},
Run Code Online (Sandbox Code Playgroud)
然后它会将它添加到我的index.html中,我已经指定它...
/* inject:js */
Run Code Online (Sandbox Code Playgroud) script-tag ×10
javascript ×7
html ×3
php ×2
ajax ×1
asp.net ×1
domdocument ×1
formatting ×1
html-parsing ×1
inject ×1
jquery ×1
node.js ×1
npm ×1
wildcard ×1
xss ×1