可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This seems to be a problem related to Safari only. I\'ve tried 4 on Mac and 3 on Windows and am still having no luck.
I\'m trying to load an external HTML file and have the JavaScript that is embedded execute.
The code I\'m trying to use is this:
$(\"#myBtn\").click(function() {
$(\"#myDiv\").load(\"trackingCode.html\");
});
trackingCode.html
looks like this (simple now, but will expand once/if I get this working):
<html>
<head>
<title>Tracking HTML File</title>
<script language=\"javascript\" type=\"text/javascript\">
alert(\"outside the jQuery ready\");
$(function() {
alert(\"inside the jQuery ready\");
});
</script>
</head>
<body>
</body>
</html>
I\'m seeing both alert messages in IE (6 & 7) and Firefox (2 & 3). However, I am not able to see the messages in Safari (the last browser that I need to be concerned with - project requirements - please no flame wars).
Any thoughts on why Safari is ignoring the JavaScript in the trackingCode.html
file?
Eventually I\'d like to be able to pass JavaScript objects to this trackingCode.html
file to be used within the jQuery ready call, but I\'d like to make sure this is possible in all browsers before I go down that road.
回答1:
You are loading an entire HTML page into your div, including the html, head and body tags. What happens if you do the load and just have the opening script, closing script, and JavaScript code in the HTML that you load?
Here is the driver page:
<!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>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<title>jQuery Load of Script</title>
<script type=\"text/javascript\" src=\"http://www.google.com/jsapi\"></script>
<script type=\"text/javascript\">
google.load(\"jquery\", \"1.3.2\");
</script>
<script type=\"text/javascript\">
$(document).ready(function(){
$(\"#myButton\").click(function() {
$(\"#myDiv\").load(\"trackingCode.html\");
});
});
</script>
</head>
<body>
<button id=\"myButton\">Click Me</button>
<div id=\"myDiv\"></div>
</body>
</html>
Here is the contents of trackingCode.html:
<script type=\"text/javascript\">
alert(\"Outside the jQuery ready\");
$(function() {
alert(\"Inside the jQuery ready\");
});
</script>
This works for me in Safari 4.
Update: Added DOCTYPE and html namespace to match the code on my test environment. Tested with Firefox 3.6.13 and example code works.
回答2:
$(\"#images\").load(location.href+\" #images\",function(){
$.getScript(\"js/productHelper.js\");
});
回答3:
A other version of John Pick\'s solution just before, this works fine for me :
jQuery.ajax({
....
success: function(data, textStatus, jqXHR) {
jQuery(selecteur).html(jqXHR.responseText);
var reponse = jQuery(jqXHR.responseText);
var reponseScript = reponse.filter(\"script\");
jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
}
...
});
回答4:
I realize this is somewhat of an older post, but for anyone that comes to this page looking for a similar solution...
http://api.jquery.com/jQuery.getScript/
jQuery.getScript( url, [ success(data, textStatus) ] )
url
- A string containing the URL to which the request is sent.
success(data, textStatus)
- A callback function that is executed if the request succeeds.
$.getScript(\'ajax/test.js\', function() {
alert(\'Load was performed.\');
});
回答5:
This doesn\'t seem to work if you\'re loading the HTML field into a dynamically created element.
$(\'body\').append(\'<div id=\"loader\"></div>\');
$(\'#loader\').load(\'htmlwithscript.htm\');
I look at firebug DOM and there is no script node at all, only the HTML and my CSS node.
Anyone have come across this?
回答6:
You\'ve almost got it. Tell jquery you want to load only the script:
$(\"#myBtn\").click(function() {
$(\"#myDiv\").load(\"trackingCode.html script\");
});
回答7:
Test with this in trackingCode.html:
<script type=\"text/javascript\">
$(function() {
show_alert();
function show_alert() {
alert(\"Inside the jQuery ready\");
}
});
</script>
回答8:
I have try to make one jquery plugin for html loading function. Please refer the following link.
http://webtech-training.blogspot.in/2010/10/dyamic-html-loader.html
Please suggest me to improve it more.
Thanks,
Mohan
回答9:
Well I had the same problem that only seemed to happen for Firefox, and I couldn\'t use another JQuery command except for .load() since I was modifying the front-end on exisitng PHP files...
Anyways, after using the .load() command, I embedded my JQuery script within the external HTML that was getting loaded in, and it seemed to work. I don\'t understand why the JS that I loaded at the top of the main document didn\'t work for the new content however...
回答10:
I was able to fix this issue by changing $(document).ready()
to window.onLoad()
.
回答11:
I ran into this where the scripts would load once, but repeat calls would not run the script.
It turned out to be an issue with using .html() to display a wait indicator and then chaining .load() after it.
// Processes scripts as expected once per page load, but not for repeat calls
$(\"#id\").html(\"<img src=wait.gif>\").load(\"page.html\");
When I made them separate calls, my inline scripts loaded every time as expected.
// Without chaining html and load together, scripts are processed as expected every time
$(\"#id\").html(\"<img src=wait.gif>\");
$(\"#id\").load(\"page.html\");
For further research, note that there are two versions of .load()
A simple .load() call (without a selector after the url) is simply a shorthand for calling $.ajax() with dataType:\"html\" and taking the return contents and calling .html() to put those contents in the DOM. And the documentation for dataType:\"html\" clearly states \"included script tags are evaluated when inserted in the DOM.\" http://api.jquery.com/jquery.ajax/ So .load() officially runs inline scripts.
A complex .load() call has a selector such as load(\"page.html #content\"). When used that way, jQuery purposefully filters out script tags as discussed in articles like this one: https://forum.jquery.com/topic/the-load-function-and-script-blocks#14737000000752785 In this case the scripts never run, not even once.