对网址进行编码并在iframe中显示

时间:2016-05-07 15:18:24

标签: javascript laravel iframe urlencode

我需要在我自己的页面上显示iframe中的一些网址...所以我写道:

Route::get('/preview/{url}', 'ArticlesController@preview');

我的控制器功能:

public function preview($url) {

        $url = urlencode($url);
            return view('pages.preview', compact('url'));


    }

和offcource我的刀片预览页面(javascript):

function preview(){
    function autoResize(id){
    var newheight;
    var newwidth;

    if(document.getElementById){
        newheight = document.getElementById(id).contentWindow.document .body.scrollHeight;
        newwidth = document.getElementById(id).contentWindow.document .body.scrollWidth;
    }

    document.getElementById(id).height = (newheight) + "px";
    document.getElementById(id).width = (newwidth) + "px";
};

    var content = '<iframe id="iframe2" src="{{$url}}" style="border:0px #FFFFFF none; position: relative;left: 0px;width: 100%; height:100%; top: 0;" name="myiFrame1" scrolling="yes" frameborder="0" marginheight="0px" marginwidth="0px" height="100%" width="100%" onLoad="autoResize(iframe1);"></iframe>';

var newNode = document.createElement("DIV");  
newNode.innerHTML = content;
document.body.appendChild(newNode); 


};

preview();

现在当我尝试这样的事情时:

http://localhost:8888/preview/http%3A%2F%2Fwww.dubaimajestic.com%2F

http://localhost:8888/preview/http://www.dubaimajestic.com

我明白了:

未找到在此服务器上找不到请求的资源/preview/http%3A%2F%2Fwww.dubaimajestic.com%2F。

如何使其工作?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是因为http://www.dubaimajestic.com中有斜杠,而且不能与laravel路由器一起正常工作。

您可以使用Regular Expression Constraints覆盖此行为,如下所示:

Route::get('preview/{url}', 'ArticlesController@preview')->where('url', '(.*)');

这应该有效:

public function preview($url) {
    dd($url);
}

但是我会改用不同的方式,因为我觉得它更清洁一点:

Route::get('preview', 'ArticlesController@preview');

将您的网址格式化为:

http://localhost:8888/preview?url=http://www.dubaimajestic.com

您可以在控制器中以这样的方式阅读:

public function preview(Request $request) {
    dd($request->input('url'));
} 

答案 1 :(得分:1)

/正在让Laravel认为这是路径的一部分。

我建议将URL设为查询字符串参数,如下所示:

http://localhost:8888/preview?url=http://www.dubaimajestic.com

然后在routes.php

// Don't accept {url} as an argument
Route::get('/preview', 'ArticlesController@preview');

然后在你的控制器中:

public function preview() 
{
    $url = request()->url;

    return view('pages.preview', compact('url'));
}

这应该有效。