如何使用书签加载javascript文件,而书签又不会重定向/重写页面?

时间:2010-09-08 08:15:36

标签: javascript dom bookmarklet dynamic

我正在尝试加载this remote debugging solution来调试/与DOM / js live交互。说明要求您将script阻止和script链接放入页面的HEAD以使其全部正常运行。没关系。这是一个很棒的工具。

但是,如果我想要一种类似于书签的方式,只需将其“插入”任何页面即可。我不明白为什么不能这样做。

这是我的书签:

javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://url-to-js-file.js?x='+(Math.random());})();

然后“url-to-js-file.js”加载iphonedebug的js:

ipdConfig = {
    baseUrl: '/ipd/', // trailing slash!
    consoleBaseUrl: 'http://192.168.1.25:8170/' // trailing slash!
}

document.body.appendChild(document.createElement('script')).src='http://192.168.1.25/ipd/ipd.js';

console.log('fin.');

请注意,src属性最初是“/ipd/ipd.js”,如说明所示。但如果我想让调试器与其他站点一起工作,它将需要像这样绝对。

我的问题是这个代码会将第一个js文件(url-to-js-file.js)转储到页面ok但是当第一个文件尝试插入其他连续文件时页面似乎重定向。实际上它不会重定向,只是重写。 Firebug将结果页面显示为没有正文,只显示HEAD元素中的ipd js文件。

为什么会这样做?

是否因为bookmarklet behavior通常会重定向到新页面?我不这么认为。因为我在bookmarklet链接中使用了一个闭包。当我注释掉“url-to-js-file.js”文件的document.body...行时,页面就会停留在原来的位置。是嵌套吗?或者它可能是其他ipd js文件导致此问题?

我已经尝试将我的“url-to-js-file.js”代码放入一个闭包中,但是全局变量ipdConfig对于破坏它的其余ipd代码变得不可见。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我最好的猜测是ipd.js文件在其代码中的某处使用document.write()。在这种情况下,您需要修改ipd.js,以便它不会这样做。

正如我所怀疑的,ipd.js是由javascript新手编写的:

document.write('<script src="' + ipdConfig.baseUrl + '_ipd.js"></script>');

修改它以改为使用appendChild(createElement(...))