te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>double click - javascript document.write in external js file - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

double click - javascript document.write in external js file - Stack Overflow

programmeradmin3浏览0评论

Working on big, high loaded project I got the problem that already described in billion of topics on forums and blog, but there is no solution that will help in my case. Here is the story.

I have the HTML code of banner, I don't know what is the code. Sometimes it's plain HTML, but sometimes it's <script> tag with document.write inside it with <script> tag that has src to doubleclick network in it.

So we have: script > document.write > script(doubleclick).

doubleclick network, as you may know, use document.write too and most of the time they give flash banners that need to load one more js file.

So after all we have: script > document.write > script(doubleclick) > document.write > script > ...

This works good when you place it in HTML directly. Page rendering 1 part, load banner1, keep rendering page, load banner2, finalizing page rendering.

But right now I need to render page first and only after that load banners. As banner use document.write I need to load it before window.onload event (note: after window.onload document.write will rewrite whole document.)

What I've done:

In the head section I have an banners object(real namespace kind of huge :)), with property scope.

When page rendering and banner code is meet I place the code of the banner into the scope and put <div id="bannerPlaceHolder"+id></div> -- so here I will need to put banner content later on

Page rendered and before </body> tag I put <script>banners.load()</script> banners.load method do this for each item in scope array:

document.write('<div id="codeHolder'+id+'">');
document.write(bannerCode);
document.write('</div>');

And only after this I have window.onload() event that do this:

take all banners codeHolders and node-by-node append it nodes from codeHolder to placeHolder, so in result I have loaded banners after rendering the page and banners are on the right places.

All is perfect except IE, it load any js script that was putted in DOM dynamically in asynchron way, so document.write inside doubleclick scripts append nodes to the end of the document and not in my codeHolder nodes. As usual it's only in IE.

I will be really appreciated to anyone who may know the solution.

Working on big, high loaded project I got the problem that already described in billion of topics on forums and blog, but there is no solution that will help in my case. Here is the story.

I have the HTML code of banner, I don't know what is the code. Sometimes it's plain HTML, but sometimes it's <script> tag with document.write inside it with <script> tag that has src to doubleclick network in it.

So we have: script > document.write > script(doubleclick).

doubleclick network, as you may know, use document.write too and most of the time they give flash banners that need to load one more js file.

So after all we have: script > document.write > script(doubleclick) > document.write > script > ...

This works good when you place it in HTML directly. Page rendering 1 part, load banner1, keep rendering page, load banner2, finalizing page rendering.

But right now I need to render page first and only after that load banners. As banner use document.write I need to load it before window.onload event (note: after window.onload document.write will rewrite whole document.)

What I've done:

In the head section I have an banners object(real namespace kind of huge :)), with property scope.

When page rendering and banner code is meet I place the code of the banner into the scope and put <div id="bannerPlaceHolder"+id></div> -- so here I will need to put banner content later on

Page rendered and before </body> tag I put <script>banners.load()</script> banners.load method do this for each item in scope array:

document.write('<div id="codeHolder'+id+'">');
document.write(bannerCode);
document.write('</div>');

And only after this I have window.onload() event that do this:

take all banners codeHolders and node-by-node append it nodes from codeHolder to placeHolder, so in result I have loaded banners after rendering the page and banners are on the right places.

All is perfect except IE, it load any js script that was putted in DOM dynamically in asynchron way, so document.write inside doubleclick scripts append nodes to the end of the document and not in my codeHolder nodes. As usual it's only in IE.

I will be really appreciated to anyone who may know the solution.

Share Improve this question edited Jul 20, 2012 at 9:05 JJJ 33.2k20 gold badges94 silver badges103 bronze badges asked Nov 24, 2008 at 21:31 small_jamsmall_jam 6372 gold badges7 silver badges7 bronze badges
Add a ment  | 

6 Answers 6

Reset to default 3

You need writeCapture.js (full disclosure: I'm the author.) All bets are off with 3rd party scripts. Today they use document.write to generate some specific HTML, but tomorrow they could change it and any simple hacks based on replacing document.write will need to be updated. writeCapture takes care of that. Your usage would be something like:

$('#bannerPlaceHolder').writeCapture().html('<script type="text/javascript" src="http://doubleclick/bannerCode.js"></script>');

The library can handle any arbitrary depth of script tags and does just fine with interspersed HTML. It also has a standalone build if you don't use jQuery.

Typically with banners you'll know the exact dimensions and placement, so how about creating an iframe dynamically with the content being what you have in bannerCode and that's all.

perhaps you could use the property innerHTML: document.getElementById("x").innerHTML=".................";

Or you could you the DOM: CreateElement and AppendChild

load it into a hidden (size 0x0) iframe, then move it elsewhere with javascript

I think iframe solution is ugly. Why cant you load the banners into a separate page and AJAX them into a DIV?

Split the document.write()-calls in separate -tags, so the output should look like:

document.write(''); document.write(bannerCode);

document.write('');

The IE will wait for document.write(bannerCode) is ready and when writes the closing -tag.

发布评论

评论列表(0)

  1. 暂无评论