2
我目前正在寫一個bookmarklet加載和在當前窗口追加一個新的<script>
標籤執行遠程js文件,像這樣:書籤,JS注入和彈出問題
javascript:(function() {
if(typeof __bml_main != "undefined") return __bml_main.init();
var s= document.createElement('script');
s.type= 'text/javascript';
s.src= 'http://127.0.0.1:8000/media/bookmarklet.js';
void(document.body.appendChild(s));
})();
我的書籤需要執行一些dom操作以便從正在查看的頁面提取數據,然後打開一個新的彈出窗口來列出它們。
問題是:如果我想繞過彈出窗口阻止程序,我無法從注入的腳本打開新窗口。我需要從小書籤代碼的開頭開始,並在需要時稍後訪問它。
我試圖做服用點是這樣的:
javascript:var my_popup = window.open('http://127.0.0.1:8000/resources/manage/new/', 'newResourcePopup',config='height=200,width=400,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no');
(function() {
// script injection (...)
})();
但如果我再嘗試從我的遠程加載腳本訪問my_popup
,大多數瀏覽器將彈出安全警告,不會讓我訪問窗口對象。這是可以理解的,因爲腳本不是來自顯示頁面的同一個域名,但我有點卡住了...
解決方法是使用div覆蓋,但我更願意打開窗口在這種情況下。
任何提示?
謝謝你的接吻! :) 這是一種醜陋的,但它工作得很好。其實,我想我會使用document.createElement()而不是document.write()來創建頁面的dom。 about:blank頁面沒有任何文檔類型,但聽起來更符合標準,操作節點而不是將標記附加爲字符串。 – Denis 2010-06-08 01:34:42
@Neewok:很高興幫助。你知道,自從我最後一次處理創建彈出窗口已經很長時間了,'document.write'仍然更可靠,而且我沒有更新我的想法。我從來沒有在空白文檔中從頭開始創建DOM,但我原則上無法想象爲什麼它不應該工作,好的想法。 :-) – 2010-06-08 06:47:18